为啥 list(my_list) 会修改对象?

Posted

技术标签:

【中文标题】为啥 list(my_list) 会修改对象?【英文标题】:Why does list(my_list) modify the object?为什么 list(my_list) 会修改对象? 【发布时间】:2013-11-13 01:50:15 【问题描述】:

我偶然发生了这种奇怪的行为:

>>> a = []
>>> a[:] = ['potato', a]
>>> print a
['potato', [...]]
>>> print list(a)
['potato', ['potato', [...]]]

调用list(a)通过什么机制在其自身的字符串表示中展开一层递归?

【问题讨论】:

【参考方案1】:

... 仅在项目包含自身时显示——即,相同的对象。 list(a) 复制列表,因此内部 a 不是同一个对象。它仅在到达“a inside a”时才显示...,而不是“a inside list(a)”。

【讨论】:

【参考方案2】:

list() 进行浅拷贝。外部列表不再是与其包含的列表相同的对象。它会按照您的预期打印。

【讨论】:

以上是关于为啥 list(my_list) 会修改对象?的主要内容,如果未能解决你的问题,请参考以下文章

分配后列表意外更改,这是为啥以及如何防止它?

List中为啥修改一个值其他值也变

python 为啥我修改列表一个元素会导致所有元素都被修改

迭代时修改list和dictionary,为啥在dict上会失败?

修改包含元组的列表

Python容器--列表