赋值和深浅拷贝

  • 浅拷贝——copy.copy()
    • 针对不可变对象,比如数值、字符串、元组,和赋值情况相同,对象的id值和原对象相同
    • 针对可变对象(申请新的内存空间)
      • 可变对象里无嵌套对象时,原对象改变不影响新对象,新对象改变也不影响原对象,两者id值不同。
      • 可变对象里有嵌套对象时,比如列表嵌套列表,改变嵌套的对象时,会影响新对象中的值。
  • 深拷贝——copy.deepcopy()
    • 申请新的内存空间,拷贝原对象本身以及所有的嵌套对象,完完整整的复制一份,改变原对象不会对新对象产生影响。
  • 赋值
    • 赋值即给对象创建一个新的引用,不会申请新的内存空间,id值相同,改变原对象会影响新对象。
>>> import copy
>>> a = [1, 2, 3, 4, ['a','b']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> print(id(a), id(b), id(c), id(d))
58582152 58582152 58581160 64786344
>>> a.append(5)
>>> a[4].append('c')
>>> a[0] = 99
>>> print(a, id(a))
[99, 2, 3, 4, ['a', 'b', 'c'], 5] 58582152
>>> print(b, id(b))
[99, 2, 3, 4, ['a', 'b', 'c'], 5] 58582152
>>> print(c, id(c))
[1, 2, 3, 4, ['a', 'b', 'c']] 58581160
>>> print(d, id(d))
[1, 2, 3, 4, ['a', 'b']] 64786344
posted @ 2020-05-31 21:53  guguda  阅读(110)  评论(0)    收藏  举报