【发布时间】:2019-08-03 23:05:22
【问题描述】:
这里是 Python 初学者。阅读有关列表引用、浅拷贝和深拷贝的文章,尝试了以下内容:
a = ['a', 'b', 'c']
b = list(a)
a[0] = 'A'
预期输出:
>>>a
['A', 'b', 'c']
>>>b
['A', 'b', 'c']
实际输出:
>>>a
['A', 'b', 'c']
>>>b
['a', 'b', 'c']
但是,它在以下情况下工作:
xs = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> ys = list(xs) # Make a shallow copy
xs[1][0] = 'X'
>>> xs
[[1, 2, 3], ['X', 5, 6], [7, 8, 9]]
>>> ys
[[1, 2, 3], ['X', 5, 6], [7, 8, 9]]
如果我在这里遗漏了什么,有人可以解释一下吗? 谢谢
Python 3.7.4
【问题讨论】:
-
什么文章?您无法区分不可变对象列表上的深拷贝和浅拷贝。
-
list() 函数将任何可迭代对象作为参数,因此它创建了一个新的列表对象。试试 list(open('text_file', 'r').read())
-
我知道它创建了一个新的列表对象,但它创建了一个浅拷贝,这意味着它只有一层深。 List 对象是新的,但 list 的元素仍然是对原始列表的子元素的引用。我将使用实际工作的代码更新我的问题
-
重复stackoverflow.com/a/28684234/9510611这里的答案回答了你的问题
-
@KevinGlasson 完美,正是我想要的。谢谢!
标签: python python-3.x