VBJ*_*VBJ 1 python tuples list python-3.x
为什么在下面的示例中t,我设置时元组不会改变names = [],但是当我向names列表中添加新值时,更改会反映出来?
它看起来tuple最初是引用列表所以任何更改都反映在元组对象中,但清空它看起来像是一个新的副本.
>>> names = ['Mark','Hary']
>>> t = (names,'Lauri')
>>> t
(['Mark', 'Hary'], 'Lauri')
>>> names.append('Donna')
>>> names
['Mark', 'Hary', 'Donna']
>>> t
(['Mark', 'Hary', 'Donna'], 'Lauri')
>>> names = []
>>> names
[]
>>> t
(['Mark', 'Hary', 'Donna'], 'Lauri')
Run Code Online (Sandbox Code Playgroud)
names.append('Donna')会影响到元组,因为元组是抱着相同的参考列表对象的names呢,和你在的地方变异它(list.append).
names = []是一个赋值语句,它不会改变引用,它会将名称names重新绑定到一个新对象(在这种情况下为空列表).这样的重新绑定不会影响元组内已存在的引用.
你可以删除就地(即修改列表对象引用的names),并有变化反映出来.这可以通过多种方式来完成,你可以使用names.clear()或者del names[:]甚至是names[:] = []:
del names[:]
Run Code Online (Sandbox Code Playgroud)
在此操作之后,内部引用t反映了此更改:
print(t)
([], 'Lauri')
Run Code Online (Sandbox Code Playgroud)