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

2024-05-29 06:00:04 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么在下面的示例中,当我设置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')

Tags: 对象示例列表names副本清空元组mark
1条回答
网友
1楼 · 发布于 2024-05-29 06:00:04

names.append('Donna')将影响元组,因为元组持有与names相同的列表对象引用,并且您正在原地对其进行变异(list.append)。你知道吗

names = []是一个赋值语句,它不改变引用,它将名称names重新绑定到一个新对象(本例中为空列表)。这样的重新绑定不会影响元组中已经存在的引用。你知道吗

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

del names[:]

此操作之后,t内的引用反映了以下更改:

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

相关问题 更多 >

    热门问题