搜索
写经验 领红包
 > 健康

pytho深浅拷贝的区别(pytho深浅拷贝应用)

导语:python深浅拷贝

深浅拷贝对于不同的数据类型,其表现也就不一样,主要区别可以分为可变数据类型和不可变数据类型

对于不可变数据类型来说

赋值、浅拷贝、深拷贝都无意义,因为他们的值永远都指向同一个类型地址

对于不可变数据类型来说,只要值相同,指向的内存地址都是一个

 定义一个变量var1>>> var1 = 123 var2的内存地址和var1相同>>> id(var2)1347747440 var3的内存地址和var1相同>>> id(var3)1347747440 var4的内存地址和var1相同>>> id(var4)1347747440
>>> tup1 = (1,2,3)>>> id(tup1)140653000336480>>> tup2 = tup1>>> id(tup2)140653000336480>>> from copy import copy, deepcopy>>> tup3 = copy(tup1)>>> id(tup3)140653000336480>>> tup4 = deepcopy(tup1)>>> id(tup4)140653000336480>>>
对于可变数据类型来说

对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

赋值

赋值,只是创建一个变量,该变量指向原来内存地址,如:

>>> var1 = {&34;: &34;, &34;: 2, &34;: [&34;, 456]}>>> var2 = var1>>> id(var1)1937003361288>>> id(var2)1937003361288

这就意味的,只要改变变量的值,两个变量都会相互受影响

l1 = [1, 2, 3]l2 = l1l2[1] = 1000print(l2 is l1)   [1, 1000, 3]print(l2)   导入拷贝模块>>> import copy>>> var1 = {&34;: &34;, &34;: 2, &34;: [&34;, 456]} 两个变量的内存地址是不一样的>>> id(var1)2084726354952>>> id(var2)208473024800834;k1&34;k1& 改变var1第一层的数据 var2 不会跟的变换>>> var1[&34;] = 123>>> var2{&39;: &39;, &39;: 2, &39;: [&39;, 456]}>>> var1[&34;] = 234>>> var2{&39;: &39;, &39;: 2, &39;: [&39;, 456]}>>> var2[&34;]&39;34;k3&39;k1&39;1&39;k2&39;k3&39;abc&34;k3&39;abc& 导入拷贝模块>>> import copy>>> var1 = {&34;: &34;, &34;: 2, &34;: [&34;, 456]} var1和var2的内存地址是不相同的>>> id(var1)1706383946760>>> id(var2)170638985274434;k3&34;k3&34;k3& var1和var2的&34;元素的内存地址是相同的>>> id(var1[&34;][1])1706383265744>>> id(var2[&34;][1])1706383265744

import copya = [1, 2, 3, 4, 5, [5, [[1, 2], 8]], {&39;: &39;}]b = copy.deepcopy(a)print(id(a) == id(b))   Trueprint(id(a[5]) == id(b[5]))   b[3] = 20 Falseprint(id(a[5][1][0]) == id(b[5][1][0]))   Trueprint(id(a[5][1][0][1]) == id(b[5][1][0][1]))   [1, 2]

本文内容由小迪整理编辑!