繁体   English   中英

列表到元组-修改列表会反映在元组中,但清空列表不会在元组中更改

[英]List into a tuple - modifying the list reflects in tuple but emptying the list does not change in tuple

为什么在下面的示例中,当我设置names = [] ,元组t不会改变,但是当我向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')

names.append('Donna')将影响元组,因为元组是抱着同样的参考列表对象 names呢,和你在的地方(变异它list.append )。

names = []是不会改变引用的赋值语句,它将names重新绑定到新对象(在这种情况下为空列表)。 这样的重新绑定不会影响元组内部已经存在的引用。

您可以就地删除(即,修改由names 引用的列表对象)并反映出该更改。 这可以通过多种方式完成,您可以使用names.clear()del names[:]甚至names[:] = []

del names[:]

执行此操作后, t内的引用具有以下更改:

print(t)
([], 'Lauri')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM