为什么在下面的示例中,当我设置names = []
时元组t
没有改变,但是当我向names
列表添加一个新值时,改变就反映出来了?你知道吗
看起来tuple
最初引用的是列表,所以任何更改都反映在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[:] = []
:此操作之后,
t
内的引用反映了以下更改:相关问题 更多 >
编程相关推荐