我正在阅读《Python学习手册》第五版中关于列表的主题。我注意到如果我们对列表进行拼接操作,它会创建一个新的对象。而extend方法不会创建新的对象,而是在原地进行改变。那么在拼接操作中实际上发生了什么呢?
例如:
l = [1,2,3,4]
m = l
l = l + [5,6]
print l,m
#output
([1,2,3,4,5,6], [1,2,3,4])
如果我使用增强赋值运算符,代码如下:
l = [1,2,3,4]
m = l
l += [5,6]
print l,m
#output
([1,2,3,4,5,6], [1,2,3,4,5,6])
在这两种操作中,后台发生了什么?
__iadd__
方法,而对于任何具有__add__
但没有__iadd__
的对象,Python会默默地使用__add__
来执行操作。因此,在元组中,当您执行a = (1, 2)
、b=a
和a +=(3, 4)
时,由于元组是不可变的,实际上就像最后一个语句是a = a + (3, 4)
一样,即a
被替换为一个全新的元组,而b
继续引用原始的(1, 2)
元组。 - ShadowRanger__radd__
上的添加。 - ShadowRanger