要从列表的引用说起
当把列表赋值给一个变量时,实际上是把列表的引用赋给了变量,引用是一个值,指向某些数据。
列表变量本身并没有包含列表,而是包含了列表的“引用”(这些引用包含一些ID数字,python在内部使用这些ID,但我们可以忽略)
而python有个copy模块,有个copy.copy()和copy.deepcopy()两个方法;
其中,copy.copy()便可以复制列表或者字典这样的可变值,而不只是复制引用。
但copy.copy()并不能解决列表中包含列表的情况,这就需要copy.deepcopy()来解决
一道例题完整阐释浅拷贝和深拷贝:
a = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy()
d = copy.deepcopy()
a.append(5)
a[4].append('c')
写出更改后的a, b, c, d
正确答案为:
a = [1, 2, 3, 4, 5, ['a', 'b', 'c']]
b = [1, 2, 3, 4, 5, ['a', 'b', 'c']]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]