我将翻译有关Python浅拷贝和深拷贝概念的内容。我注意到大部分文章/博客/回答都是使用嵌套列表进行解释。
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()
在嵌套列表和简单列表上的行为不同。此外,如果我要使浅表副本适用于简单列表,该怎么做?