python深浅拷贝

学习深浅拷贝要先明白赋值

赋值:只是复制了新对象的引用,不会开辟新的空间
li=[1,23,3,45,3]
li2=li #赋值:复制对象会随着原列表一起变化
print(li)  #[1, 23, 3, 45, 3]
print(li2) #[1, 23, 3, 45, 3]
li.append(90) 
print(li) #[1, 23, 3, 45, 3,90]
print(li2) #[1, 23, 3, 45, 3,90]
# id():检测数的内存地址
print(id(li)) #2655728521736
print(id(li2)) #2655728521736

浅拷贝

# 浅拷贝:数据半共享,会创建新的对象,拷贝第一层的数据,嵌套层还会指向原来的地址
# 嵌套层还会指向原来的地址
import copy
a=[1,2,4,3,[4,5]]     #嵌套列表:一个列表里面还有列表
b=copy.copy(a)         #浅拷贝
print(f'这是原列表:{a}')
print(f'这是原列表:{b}')
a.append(8)
print(f'这是现在列表:{a}') #[1, 2, 4, 3, [4, 5], 8]
print(f'这是现在列表:{b}') #[1, 2, 4, 3, [4, 5]]
print(id(a)) #2418006053128
print(id(b)) #2418006053192
a[4].append(2) #拿到嵌套层,为嵌套层添加
print(a) #[1, 2, 4, 3, [4, 5, 2], 8]
print(f'这是现在列表:{a}') #[1, 2, 4, 3, [4, 5, 2], 8]
print(f'这是现在列表:{b}') #[1, 2, 4, 3, [4, 5, 2]] 数据半共享,里面的嵌套层数据公用,外层不共享
print(id(a[4])) #2494921697544  #检测嵌套层内存地址 两个地址一样,说明用的一个
print(id(b[4])) #2494921697544  
深拷贝:数据完全不共享,不节省空间,安全性更高
import copy   #导入模块、
a=[1,2,3,[4,5]]
b=copy.deepcopy(a)  #深拷贝:是两个完全独立的对象,互不干扰
print('原来的:',a)  #[1, 2, 3, [4, 5]]
print('原来的:',b)  #[1, 2, 3, [4, 5]]
a.append(9)
a[3].append(99)
print(a)  #[1, 2, 3, [4, 5, 99], 9]
print(b)  #[1, 2, 3, [4, 5]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值