python常见问题:浅拷贝和深拷贝

要从列表的引用说起

当把列表赋值给一个变量时,实际上是把列表的引用赋给了变量,引用是一个值,指向某些数据。

列表变量本身并没有包含列表,而是包含了列表的“引用”(这些引用包含一些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']]

猜你喜欢

转载自blog.csdn.net/honorwh/article/details/88822385