重新分配一块内存,创建一个新的对象,里面的元素是原对象中子对象的引用。
对应的函数copy.copy()
.
# l2 是 l1 的浅拷贝
l1 = [1, 2, 3]
l2 = list(l1)
l1 == l2
output: True
l1 is l2
output: False
# s2 是 s1 的浅拷贝
s1 = set([1, 2, 3])
s2 = set(s1)
# t2 不是 t1 浅拷贝。
t1 = (1, 2, 3)
t2 = tuple(t1)
t1 == t2
output: True
t1 is t2
output: True
l1 = [[1, 2], (30, 40)]
l2 = list(l1)
l1.append(100)
l1[0].append(3)
l1
output: [[1, 2, 3], (30, 40), 100]
l2
output: [[1, 2, 3], (30, 40)]
l1[1] += (50, 60)
l1
output: [[1, 2, 3], (30, 40, 50, 60), 100]
l2
output: [[1, 2, 3], (30, 40)]
重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。
import copy
l1 = [[1, 2], (30, 40)]
l2 = copy.deepcopy(l1)
l1.append(100)
l1[0].append(3)
l1
output:
[[1, 2, 3], (30, 40), 100]
l2
output:
[[1, 2], (30, 40)]