Python之浅拷贝和深拷贝

介绍

如果你学习过别的编程语言,比如java,那么应该知道shallowcopy和deep copy。在Python中,copy也有深浅之分,而且与直接复制各不相同。

用法

1. 浅拷贝

a = {'n':[1,2,3]} 
b = a.copy() 
a, b
# ({'n': [1, 2, 3]}, {'n': [1, 2, 3]})

a['n'].append(4)
a, b
# ({'n': [1, 2, 3, 4]}, {'n': [1, 2, 3, 4]})

2. 深拷贝

import copy

a = {'n':[1,2,3]} 
b = copy.deeepcopy(a)
a, b
# ({'n': [1, 2, 3]}, {'n': [1, 2, 3]})

a['n'].append(4)
a, b
# ({'n': [1, 2, 3, 4]}, {'n': [1, 2, 3]})

3. 区别

从上面两个例子我们可以看到,使用浅拷贝b会随a的变化而变化,因为他们share的是同一个list地址,而深拷贝中,b和a有独立的list地址互不影响。
而且拷贝与赋值不同,如果是赋值操作,a和b会share同一个字典对象,而拷贝时a和b有各自的字典对象,只不过字典内的list不同而已。
注意,使用深拷贝要import模块copy!

posted @ 2020-01-22 14:56  MrDoghead  阅读(195)  评论(0编辑  收藏  举报