gpt4 book ai didi

python - 使用函数更改参数值?

转载 作者:行者123 更新时间:2023-12-01 09:16:00 26 4
gpt4 key购买 nike

看起来我只能使用函数更改可变变量的值,但是是否可以更改不可变变量

代码

def f(a, b):
a += 1
b.append('hi')

x = 1
y = ['hello']
f(x, y)
print(x, y) #x didn't change, but y did

结果

1 [10, 1]

所以,我的问题是是否可以使用函数修改不可变变量?如果没有那为什么? python 禁止人们这样做的原因是什么?

最佳答案

在Python中,列表是通过对象引用传递的。实际上,python 中的所有内容都是一个对象,但是当您将单个变量传递给函数时,如果值发生更改,它会创建该变量的本地副本,但在列表的情况下,如果它创建本地副本,即使引用仍然保留在前一个列表中目的。因此列表的值不会改变。\

您可以引用link .

您可以查看以下示例以进行说明。

def fun1(b):
for i in range(0,len(b)):
b[i]+=4

arr=[1,2,3,4]
print("Before Passing",arr)
fun2(arr)
print("After Passing",arr)

#output
#Before Passing [1, 2, 3, 4]
#After Passing [5, 6, 7, 8]

如果您不希望任何函数意外更改值,您可以使用不可变对象(immutable对象),例如元组。

编辑:(复制示例)

我们可以通过打印两个对象的 id 来检查它。

def fun(a):
a=5
print(hex(id(a)))

a=3
print(hex(id(a)))
fun(a)

# Output:
# 0x555eb8890cc0
# 0x555eb8890d00

但是如果我们使用 List 对象来实现:

def fun(a):
a.append(5)
print(hex(id(a)))


a=[1,2,3]
print(hex(id(a)))
fun(a)

# Output:
# 0x7f97e1589308
# 0x7f97e1589308

关于python - 使用函数更改参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51247566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com