直接赋值、浅拷贝和深拷贝

import copy
# 可变类型
list1 = [1,2,3,4,5]
a = [2,2,list1]
print(id(a[2])) # 4488333760
b = a
a_copy = copy.copy(a)
print(id(a_copy[2])) # 4488333760
a_deepcopy = copy.deepcopy(a)
print(id(a_deepcopy[2])) # 4489473664
print("****打印数值****")
print(a) # [2,2,[1,2,3,4,5]]
print(b) # [2,2,[1,2,3,4,5]]
print(a_copy) # [2,2,[1,2,3,4,5]]
print(a_deepcopy) # [2,2,[1,2,3,4,5]]

print("****打印地址****")
print(id(a)) # 4414442368
print(id(b)) # 4414442368
print(id(a_copy)) # 4414429696
print(id(a_deepcopy)) # 4415567488

print("list1追加内容6后")
list1.append(6)
print("****打印数值****")
print(a) # [2,2,[1,2,3,4,5,6]]
print(b) # [2,2,[1,2,3,4,5,6]]
print(a_copy) # [2,2,[1,2,3,4,5,6]]
print(a_deepcopy) # [2,2,[1,2,3,4,5]]

print("****打印地址****")
print(id(a)) # 4414442368
print(id(b)) # 4414442368
print(id(a_copy)) # 4414429696
print(id(a_deepcopy)) # 4415567488

print("对于不可变类型分界线------")
# 不可变类型
list2 = ["s1","s2","s3"]
c = (2,2,list2)
print(id(c[2])) # 4501638528
c_copy = copy.copy(c)
print(id(c_copy[2])) # 4501638528
c_deepcopy = copy.deepcopy(c)
print(id(c_deepcopy[2])) # 4501638720
print("****打印数值****")
print(c) # (2, 2, ['s1', 's2', 's3'])
print(c_copy) # (2, 2, ['s1', 's2', 's3'])
print(c_deepcopy) # (2, 2, ['s1', 's2', 's3'])

print("****打印地址****")
print(id(c)) # 4500082304
print(id(c_copy)) # 4500082304
print(id(c_deepcopy)) # 4500314432

print("list2追加内容s4后")
list2.append("s4")
print("****打印数值****")
print(c) # (2, 2, ['s1', 's2', 's3', 's4'])
print(c_copy) # (2, 2, ['s1', 's2', 's3', 's4'])
print(c_deepcopy) # (2, 2, ['s1', 's2', 's3'])

print("****打印地址****")
print(id(c)) # 4500082304
print(id(c_copy)) # 4500082304
print(id(c_deepcopy)) # 4500314432

  1. 直接赋值(a = b):对象的引用,a和b指向同一个对象
  2. 深拷贝(a = copy.deepcopy(b)):
    对于可变类型:a完全拷贝了b对象及其子对象,都创建了新的存储空间
    对于不可变类型:a完全拷贝了b对象及其子对象,都创建了新的存储空间
  3. 浅拷贝:(a = copy.copy(b) 或 a = b.copy()):
    对于可变类型:a 完全拷贝了b, 重新创建了新的存储空间,但是其子对象还是指向统一对象。
    对于不可变类型:a 和 b指向同一个对象,a 的子对象和b的子对象也指向同一个对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值