Python基础——深浅拷贝

1、浅拷贝

1.1 不可变类型,不拷贝。

import copy

v1 = "华青水上"
print(id(v1)) # 2790670093264

v2 = copy.copy(v1) 
print(id(v2)) # 2790670093264

按理说拷贝v1之后,v2的内存地址应该不同,但由于python内部优化机制,内存地址是相同的,因为对不可变类型而言,如果以后修改值,会重新创建一份数据,不会影响原数据,所以,不拷贝也无妨。

1.2 可变类型,只拷贝第一层。

import copy

v1 = ["华青水上", "root", [44, 55]]
print(id(v1))     # 2790670283272
print(id(v1[2]))  # 2790670293192

v2 = copy.copy(v1)
print(id(v2))     # 2790670283656
print(id(v2[2]))  # 2790670293192

2、深拷贝

2.1 不可变类型,不拷贝

import copy

v1 = "华青水上"
print(id(v1))  # 2790670548880

v2 = copy.deepcopy(v1)
print(id(v2))  # 2790670548880

特殊的元组:

  • 元组元素中无可变类型,不拷贝
import copy

v1 = ("武沛齐", "root")
print(id(v1))  # 2790670581320

v2 = copy.deepcopy(v1)
print(id(v2))  # 2790670581320
  • 元组元素中有可变类型,找到所有【可变类型】或【含有可变类型的元组】 均拷贝一份
import copy

v1 = ("华青水上", "root", [11, [44, 55], (11, 22), (11, [], 22), 33])
v2 = copy.deepcopy(v1)

print(id(v1))        # 2790670557336
print(id(v2))        # 2790670615000

print(id(v1[2]))     # 2790670295944
print(id(v2[2]))     # 2790670295752

print(id(v1[2][1]))  # 2790670293256
print(id(v2[2][1]))  # 2790670296584

print(id(v1[2][2]))  # 2790670637128
print(id(v2[2][2]))  # 2790670637128

print(id(v1[2][3]))  # 2790670218008
print(id(v2[2][3]))  # 2790670217528

2.1 可变类型,找到所有层级的 【可变类型】或【含有可变类型的元组】 均拷贝一份

import copy

v1 = ["华青水上", "root", [11, [44, 55], (11, 22), (11, [], 22), 33]]
v2 = copy.deepcopy(v1)

print(id(v1))        # 2790670299016
print(id(v2))        # 2790670293000

print(id(v1[2]))     # 2790670296648
print(id(v2[2]))     # 2790670293256

print(id(v1[2][1]))  # 2790670296776
print(id(v2[2][1]))  # 2790670296200

print(id(v1[2][2]))  # 2790670633864
print(id(v2[2][2]))  # 2790670633864

print(id(v1[2][3]))  # 2790670217688
print(id(v2[2][3]))  # 2790670557336
import copy

v1 = ["华青水上", "root", [44, 55]]
v2 = copy.deepcopy(v1)

print(id(v1))  # 2790670270344
print(id(v2))  # 2790670282440


print(id(v1[2]))  # 2790670281096
print(id(v2[2]))  # 2790670296648

至此,Python基础之深浅拷贝总结完毕,不当之处,欢迎指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值