python基础-深拷贝、浅拷贝
程序员文章站
2022-05-28 19:39:34
...
一、“==”和 is
- “==”是比较两个对象是否相等,而不管是不是指向同一个地址
- is 是指不仅对象相等,而且指向的内存地址也相等。。(小整数对象池除外)
二、浅拷贝和深拷贝
- 浅拷贝:a = [1, 2, 3] b = a 拷贝后id(a)和id(b)相等。
- 深拷贝:拷贝的内容相同,地址不用。
import copy
c = copy.deepcopy(a)
- 1
- 2
- 在深拷贝嵌套列表的时候,列表和嵌套的列表都进行了拷贝。
而用copy.copy的时候,只是深拷贝了外层列表,并内有对嵌套
列表进行深拷贝。。。
import copy
a = [1, 2, 3]
b = [4, 5, 6]
c = [a, b]
d = copy.deepcopy(c)
# id(d) != id(c)
print(id(d))
print(id(c))
# 内嵌列表的地址也不相等。
print(id(d[0]))
print(id(a))
e = copy.copy(c)
# 外层列表地址不一样
print(id(e))
print(id(c))
# 内嵌列表地址一样
print(id(a))
print(id(e[0]))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
copy.copy()
对于可变数据类型只拷贝一层,对于不可变数据类型,不拷贝,直接饮用(地址一样)copy.deepcopy()
盖头换面,里里外外都改变。(地址不一样)
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
</div>