python的深拷贝与浅拷贝
程序员文章站
2022-05-28 19:41:22
...
1.首先我们要区分“==”和“is”的区别
is 是⽐较两个引⽤是否指向了同⼀个对象(引⽤⽐较)
== 是比较两个对象是否相等
2.浅拷贝:通俗的理解是:拷⻉了引⽤,并没有拷⻉内容
a = [1,2,3]
b = a
print(id(a))
print(id(b))
a.append(4)
print(a)
print(b)
输出结果:
2351359320328
2351359320328
[1, 2, 3, 4]
[1, 2, 3, 4]
可以看出a,b的地址是一样的
如果a改变了,b也会跟着改变,原因在于a,b指向同一个地址
3.深拷贝(需要导入copy包)
import copy
a = [1,2,3]
b = copy.deepcopy(a)
print(id(a))
print(id(b))
a.append(4)
print(a)
print(b)
输出结果:
2728933169288
2728933184136
[1, 2, 3, 4]
[1, 2, 3]
可以看出,深拷贝后ab地址不一样,可以理解为开辟了一个新的空间给b,并将a的内容复制到b的空间中,所以ab是独立的,即使a改变了,b也不会变
再举一个复杂的例子以便大家巩固
a = [1,2,3]
b = [4,5,6]
c = [a,b]
d = c # 浅拷贝
e = copy.deepcopy(c) # 深拷贝
print(id(c))
print(id(d))
print(id(e))
a.append(4)
print(a)
print(b)
print(c)
print(d)
print(e)
输出结果:
2043216650504
2043216650504 # cd的地址相同
2043216777672 # ce的地址不同
[1, 2, 3, 4]
[4, 5, 6]
[[1, 2, 3, 4], [4, 5, 6]]
[[1, 2, 3, 4], [4, 5, 6]] # d随之改变了
[[1, 2, 3], [4, 5, 6]] # e没有随之改变
上一篇: 网站–微信–后端报错机制【原创】
下一篇: Python深拷贝、浅拷贝详解