python之浅拷贝copy.copy和深拷贝copy.deepcopy总结

说明:numpy库的浅拷贝和深拷贝原理也是一样!

注意:ndarray.view() 方会创建一个新的数组对象,该方法创建的新数组的维数更改不会更改原始数据的维数【维度才是第一层,维度内部的元素都是第二层了】。

 

python库浅拷贝copy.copy

import copy


# 浅拷贝【改变id指向,但仅拷贝第一层,往后层依然共享】

a = [1, 23, 45, [1, 23, 4]]

b = copy.copy(a)

print(id(a))  # id = 2536640028360
print(id(b))  # id = 2536640027528

# 副本b改变第一层,不会影响a
b[0] = 1111

# 副本b改变第二层,会影响a
b[3][0] = 22222

print(a)  # 输出:[1,23,45,[22222,23,4]]

python深拷贝copy.deepcopy 

import copy

# 深度拷贝【改变id指向并完全复制】

a = [1, 23, 45, [1, 23, 4]]
b = copy.deepcopy(a)

print(id(a))  # id = 2536640028360
print(id(b))  # id = 2536640027528

# 副本b改变第一层,不会影响a
b[0] = 1111

# 副本b改变第二层,也不会影响a
b[3][0] = 22222

print(a)  # 输出:[1, 23, 45, [1, 23, 4]]

 

你可能感兴趣的:(python之浅拷贝copy.copy和深拷贝copy.deepcopy总结)