深、浅拷贝总结
深拷贝
-
拷贝可变数据类型,如列表容器:
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
-
a 与 b 所指的列表容器的空间地址不一致,即
id(a) != id(b)
-
a 与 b 列表容器中的可变数据类型的空间地址不一致
-
a 与 b 列表容器中的不可变数据类型的空间地址一致
注意:
-
a 列表容器中的某些元素发生改变时,b 容器中的相应元素是否会发生相同的改变?
答案是: a 容器中的任何元素发生任何变化,与 b 容器毫无瓜葛,b 中元素不会发生变化 !
图示
浅拷贝
-
拷贝可变数据类型,如列表容器:
a = [1, 2, [3, 4]]
b = copy.copy(a)
-
a 与 b 所指的列表容器的空间地址不一致,即
id(a) != id(b)
-
a 与 b 列表容器中的所有元素的空间地址都是一致的!
注意:
-
a 列表容器中的某些元素发生改变时,b 容器中的相应元素是否会发生相同的改变?
答案是:
- 若 a 容器中的第一级元素发生改变,b 容器中的相应的元素不会发生改变!
- 若 a 容器中的第二级乃至更深层级的元素发生改变,b 容器中的相应元素也会发生相同的改变!
图示
深浅拷贝不可变元素
import copy
a = 10
b = copy.copy(a)
b = copy.deepcopy(a)
当深浅拷贝不可变数据类型,如整型时,a 与 b 所指向的空间地址是一致的!
图示