pythom----浅copy和深copy Python的深copy和浅copy

Python的深copy和浅copy

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

浅copy:

复制代码
a = [1, 2, [1, 2, 3]]
b = a.copy()
print(a)
print(b)

a.append(4)
a[2][0] = 0
print(a)
print(b)
复制代码

输出结果:

[1, 2, [1, 2, 3]]
[1, 2, [1, 2, 3]]
[1, 2, [0, 2, 3], 4]
[1, 2, [0, 2, 3]]

浅copy只复制了第一层数据,列表里存储的子列表其实储存的是内存地址,所以只复制了子列表的地址,当子列表变化时跟着变化

深copy:

复制代码
import copy
a = [1, 2, [1, 2, 3]]
b = copy.deepcopy(a)
print(a)
print(b)

a.append(4)
a[2][0] = 0
print(a)
print(b)
复制代码

输出结果:

[1, 2, [1, 2, 3]]
[1, 2, [1, 2, 3]]
[1, 2, [0, 2, 3],4]
[1, 2, [1, 2, 3]]

同样的操作,换成深copy之后,复制之后子列表中的值不会跟着变化(将原来的数据完全复制了一遍)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>内容摘抄于博友:doubtful  的随笔

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

浅copy:

复制代码
a = [1, 2, [1, 2, 3]]
b = a.copy()
print(a)
print(b)

a.append(4)
a[2][0] = 0
print(a)
print(b)
复制代码

输出结果:

[1, 2, [1, 2, 3]]
[1, 2, [1, 2, 3]]
[1, 2, [0, 2, 3], 4]
[1, 2, [0, 2, 3]]

浅copy只复制了第一层数据,列表里存储的子列表其实储存的是内存地址,所以只复制了子列表的地址,当子列表变化时跟着变化

深copy:

复制代码
import copy
a = [1, 2, [1, 2, 3]]
b = copy.deepcopy(a)
print(a)
print(b)

a.append(4)
a[2][0] = 0
print(a)
print(b)
复制代码

输出结果:

[1, 2, [1, 2, 3]]
[1, 2, [1, 2, 3]]
[1, 2, [0, 2, 3],4]
[1, 2, [1, 2, 3]]

同样的操作,换成深copy之后,复制之后子列表中的值不会跟着变化(将原来的数据完全复制了一遍)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>内容摘抄于博友:doubtful  的随笔

猜你喜欢

转载自www.cnblogs.com/goldapple/p/13166367.html