美文网首页程序员
浅拷贝copy和深拷贝deepcopy的区别和使用

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

作者: 黑加仑妞 | 来源:发表于2018-06-28 09:59 被阅读5次

    官方说法有对深拷贝和浅拷贝的解释,之前面试的时候,也有被问到,但是实际上我几乎没有用上过,今天刚好用上了,总结一下,至于官方解释,关于浅拷贝只是拷贝了引用,深拷贝另辟空间的各种说法,大家可以自行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的区别和使用

        本文链接:https://www.haomeiwen.com/subject/dtzwyftx.html