浅拷贝copy和深拷贝deepcopy的区别和使用

官方说法有对深拷贝和浅拷贝的解释,之前面试的时候,也有被问到,但是实际上我几乎没有用上过,今天刚好用上了,总结一下,至于官方解释,关于浅拷贝只是拷贝了引用,深拷贝另辟空间的各种说法,大家可以自行google,我就简单记录一下使用。

1、我们最常用的拷贝是使用=,例如

>>>a = [11,22,33]

>>>b = a

>>>id(a)

25084152

>>>id(b)

25084152

>>>b.append(44)

>>>a

[11,22,33,44]

>>>b

[11,22,33,44]

可以发现,如果使用这种方式的话,a改变的时候,b也会改变,有很多情况下,我们不希望这样,那么这种情况如何解决呢?

2、copy.copy()

一般深拷贝和浅拷贝用在操作{}和[],例如:

a = {

    'a': 1,

    'b': 2,

}

如果想拷贝a给b,但是又不想出现上面1的情况,就可以使用浅拷贝copy(),那样a的值改变,就不会影响到b的值了

b = copy.copy()

3、copy.deepcopy()

但是有时候,字典或者列表里面会嵌套字典或者其他,这时候,如果还是使用浅拷贝的话,嵌套的那个字典就会出现1所说的情况,就是a中的嵌套字典改变的时候,b的嵌套字典也会改变,所有这时候,可以使用深拷贝

a = {

    'a': 1,

    'b': 2,

    'c': {

        'd': 4

}

}

b = copy.deepcopy()

这样a,b就不会被相互影响了。

你可能感兴趣的:(浅拷贝copy和深拷贝deepcopy的区别和使用)