admin 管理员组

文章数量: 1087709

Python浅拷贝和深拷贝以及内存分析

浅拷贝和深拷贝

深入了解参数传递的底层原理,需要理解一下“浅拷贝和深拷贝”,拷贝的内置函数为:copy(浅拷贝)、deepcopy(深拷贝)

浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。

深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象

例子:

import copydef testcopy():'''测试浅拷贝'''a=[11,22,[33,44]]b=copy.copy(a)print("a",a)print("b",b)b.append(55)b[2].append(66)print('浅拷贝')print('a',a)print('b',b)
testcopy()

返回:

>>>a [11, 22, [33, 44]]
      b [11, 22, [33, 44]]
      浅拷贝
      a [11, 22, [33, 44, 66]]
      b [11, 22, [33, 44, 66], 55]

注:可以从结果看到,浅拷贝b修改子元素时,源对象也跟着修改了。根据图可以看到,浅拷贝只拷贝第一层引用地址,之后引用还是使用原引用地址没有发生改变。如图:

深拷贝示例:

def testdeepcopy():'''测试深拷贝'''a = [11, 22, [33, 44]]b = copy.deepcopy(a)print("a", a)print("b", b)b.append(55)b[2].append(66)print('深拷贝')print('a', a)print('b', b)testdeepcopy()

返回值:

>>>a [11, 22, [33, 44]]
      b [11, 22, [33, 44]]
     深拷贝
     a [11, 22, [33, 44]]
     b [11, 22, [33, 44, 66], 55]

注:根据所示可以看出,深拷贝是把有关对象指向全部拷贝一份。深拷贝b修改数据时,将不会修改a任何数据

本文标签: Python浅拷贝和深拷贝以及内存分析