【发布时间】:2020-03-20 09:25:35
【问题描述】:
我正在理解 python 中的浅拷贝和深拷贝概念。我观察到大部分posts/blogs/SO answer 解释这些概念都是使用嵌套列表。
import copy
lst = [[1,2,3],[4,5,6]]
b = copy.copy(lst)
c = copy.deepcopy(lst)
# Shallow copy demo
b[0][0] = 9
print(b)
# >>> [[9, 2, 3], [4, 5, 6]]
print(lst)
# >>> [[9, 2, 3], [4, 5, 6]]
# Deepcopy demo
c[0][0] = 10
print(c)
# >>> [[10, 2, 3], [4, 5, 6]]
print(lst)
# >>> [[9, 2, 3], [4, 5, 6]]
通过上面的简单示例,我理解了浅拷贝和深拷贝的概念。但是当我实现这个概念时,在一个简单的列表(一维列表)上,观察到的是浅拷贝表现得像深拷贝。
import copy
lst = [1,2,3]
b = copy.copy(lst)
c = copy.deepcopy(lst)
# Shallow copy demo
b[0] = 0
print(b)
# >>> [0, 2, 3]
print(lst)
# >>> [1,2,3]
# Deepcopy demo
c[0] = 9
print(c)
# >>> [9,2,3]
print(lst)
# >>> [1,2,3]
这表明copy.copy(lst) 的行为有所不同,它进行的是深拷贝而不是浅拷贝。
我想了解,为什么 copy.copy() 的行为对于嵌套列表和简单列表是不同的。另外,如果我必须让浅拷贝为简单列表工作,我该如何实现?
【问题讨论】:
-
'Shallow' vs. 'deep' 仅在数据结构的深度超过一个级别时才重要。您的整数列表并非如此。
-
@jasonharper,感谢您的说明。
标签: python-3.x deep-copy shallow-copy