首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表修改为元组-修改列表反映为元组,但清空列表在元组中不会更改。

将列表修改为元组-修改列表反映为元组,但清空列表在元组中不会更改。
EN

Stack Overflow用户
提问于 2016-12-15 19:33:33
回答 1查看 59关注 0票数 1

为什么在下面的示例中,当我设置t时元组names = []不改变,但是当我向names列表添加一个新值时,更改就会被反映出来?

看起来tuple最初引用的是列表,所以任何更改都反映在tuple对象中,但是清空它看起来是一个新的副本。

代码语言:javascript
复制
>>> 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')
EN

Stack Overflow用户

回答已采纳

发布于 2016-12-15 19:36:16

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

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

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

代码语言:javascript
复制
del names[:]

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

代码语言:javascript
复制
print(t)
([], 'Lauri')
票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41171985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档