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基础之深浅拷贝总结完毕,不当之处,欢迎指正!

猜你喜欢

转载自blog.csdn.net/r1141207831/article/details/117911482