python深拷贝和浅拷贝

浅拷贝:拷贝引用
a = 1  # a指向存储1的内存空间
b = a  # b指向a指向的存储空间
id(a) == id(b)  # True id()用于获取对象的内存地址
a = 2  # a指向的内存地址改变
id(a) == id(b)  # False
print(b)  # b还是等于1 b在a改变之前已经指向了 1,不会因为a的指向改变而改变
a = [1, 2, 3]
b = a
id(a) == id(b)
a.append(4)  # 此时并不是改变指向,只是添加了4,与重新赋值不一样
id(a) == id(b)
print(a,b)
a = dict(name='zhangsan', age=40, child_age=[10,11])
b = a.copy()  # 这是浅拷贝 拷贝的是引用
a['name'] = 'a'
print(a)  # {'name': 'a', 'age': 40, 'child_age': [10, 11]}
print(b)  # {'name': 'zhangsan', 'age': 40, 'child_age': [10, 11]}
a['child_age'].append(4)
print(a)  # {'name': 'a', 'age': 40, 'child_age': [10, 11, 4]}
print(b)  # {'name': 'zhangsan', 'age': 40, 'child_age': [10, 11, 4]}
#  列表里面的切片是浅拷贝
a = [1, 2, 3, 4, 5, 6, 7, 8]
b = a[1:4]
import copy
a = [1, 2]
b = [3, 4]
c = [a, b]
d = copy.copy(c)  # 浅拷贝
id(c[0]) == id(d[0])  # True
id(c[1]) == id(d[1])  # True
a.append(34)
print(c)  # [[1, 2, 34], [3, 4]]
print(d)  # [[1, 2, 34], [3, 4]]
深拷贝:会重新开辟一块内存空间
import copy
a = [1, 2, 3]
b = copy.deepcopy(a)
id(a) == id(b)  # False 深拷贝会重新开辟一个完全独立的内存空间 互不影响
a = [1, 2]
b = copy.deepcopy(a)
id(a) == id(b)  # False 重新开辟一个内存空间
a = (1, 2)
b = copy.deepcopy(a)
id(a) == id(b)  # True 这是因为元组是不可变的,所以不需要重新开辟一个空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值