Python在函数中更改变量与数组?
我对从函数内部更改(变异或追加)变量有点困惑。Python在函数中更改变量与数组?,python,function,methods,immutability,mutable,Python,Function,Methods,Immutability,Mutable,我对从函数内部更改(变异或追加)变量有点困惑。 作为参考,我发现这个问题是关于。它描述了如何在阵列上执行此操作: def add_thing(a): a.append(2) my_a = [1] append_two(my_a) my_a >>> [1,2] 我们使用a+=[2]得到相同的结果 但是,如果我们使用字符串或整数尝试相同的操作: def add_world (s): s += " world" my_str = "
作为参考,我发现这个问题是关于。它描述了如何在阵列上执行此操作:
def add_thing(a):
a.append(2)
my_a = [1]
append_two(my_a)
my_a
>>> [1,2]
我们使用a+=[2]得到相同的结果
但是,如果我们使用字符串或整数尝试相同的操作:
def add_world (s):
s += " world"
my_str = "hello"
add_world(my_str)
my_str
>>> "hello"
它不会改变,整数也是如此,比如:
def add_one(i):
i += 1
x = 1
add_one(x)
x
>>> 1
我的问题是:
None
a
是不可变的,则a+=b
相当于a=a+b
。如果a
是可变的,那么使用+=
将使对象发生变异。基本上,+=
只是一个方法调用(到\uuuidd\uuuu
)。在不可变对象的情况下,该方法返回一个新对象,不改变原始值;对于可变对象,该对象改变,并返回自身列表
而言,这并不是以最容易访问的方式记录的。最贴切的说法是:
像x+=1
这样的增广赋值表达式可以重写为x=x+1
,以获得类似但不完全相同的效果。在增强版本中,x只计算一次。此外,在可能的情况下,实际操作在适当的位置执行,这意味着不创建新对象并将其分配给目标,而是修改旧对象
由于列表是可变的,这意味着就地操作是可能的
为什么+=操作符没有像我期望的那样工作?我相当确定这是我的_var=my _var+东西的简写,在一个函数中工作得很好
如上所述,
a+=b
与a=a+b
并不完全相同。区别在于对象a
有机会定义a+=b
的特殊行为,这可能不同于a+b
的行为。列表这样做是为了+=
工作到位。可能的副本可能的副本仔细阅读,最好两次。这会帮你解决一些问题。谢谢大家,我很确定这是一个覆盖范围很广的地区,我就是找不到任何具体的东西。