python基础-深拷贝、浅拷贝

一、“==”和 is

这里写图片描述

  • “==”是比较两个对象是否相等,而不管是不是指向同一个地址
  • is 是指不仅对象相等,而且指向的内存地址也相等。。(小整数对象池除外)

二、浅拷贝和深拷贝

  • 浅拷贝:a = [1, 2, 3] b = a 拷贝后id(a)和id(b)相等。
  • 深拷贝:拷贝的内容相同,地址不用。
 import copy
 c = copy.deepcopy(a) 
  • 在深拷贝嵌套列表的时候,列表和嵌套的列表都进行了拷贝。
    而用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]))
  • copy.copy()
    对于可变数据类型只拷贝一层,对于不可变数据类型,不拷贝,直接饮用(地址一样)

  • copy.deepcopy()
    盖头换面,里里外外都改变。(地址不一样)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值