python 浅拷贝

浅拷贝: 会在内存中开辟一个新的空间, 存放这个copy列表, 但是列表里面的内容还是沿用之前对象的内存地址,
所以l1 和l2 列表内存地址不一样, 里面元素内存地址是一样的


l1 = [1, 2, 3, ['hello', 'word']]
l2 = l1.copy()
l1[3][0] = 'hi'
print(id(l1), id(l2)) #2950837006152 2950839207176
print(id(l1[0]), id(l2[0])) #140712637329664 140712637329664
print(id(l1[3])) #2950836952584
print(id(l2[3])) #2950836952584

深拷贝: l2 深拷贝l1 数据, 会出现, l1 中元素是不可变的, l2 还是沿用l1 元素的内存地址, 如果l1 中元素是(列表, 字典, 集合)可变数据类型, l2 会创建一块新的内存地址.

import copy
l1 = [1, 2, 3, ['hello', 'word']]
l2 = copy.deepcopy(l1)
l2[3][0] = 'hi'
print(l1, l2)  #[1, 2, 3, ['hello', 'word']] [1, 2, 3, ['hi', 'word']]
print(id(l1), id(l2))  #2381170054920 2381169355976
print(id(l1[0]), id(l2[0])) #140712637329664 140712637329664
print(id(l1[1]), id(l2[1])) #140712637329696 140712637329696
print(id(l1[3]), id(l2[3])) # 2381169389384 2381171805832

注释: python变量变的是地址,不变的是内存空间中的值, 无论浅拷贝, 或深拷贝, 里面的不可变的元素, l1改变, l2不会变, 而对于, 可变类型的元素, 浅拷贝, 会同时改变, 而深拷贝, 不会互相影响

   对于给变量赋值时,每一次的赋值都会产生一个新的地址空间,将新内容的地址赋值给变量,但是对于相同的值,地址不发生变化

复杂的数据类型(列表、元祖、字典),如果添加某一项元素,或者添加几个元素,不会改变其本身的地址,只会改变其内部元素的地址引用,但是如果对其重新赋值时,就会重新赋予地址覆盖旧地址,这时地址就会发生改变

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值