搜索
写经验 领红包
 > 影视

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 = {: , : 2, : [, 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 = {: , : 2, : [, 456]} 两个变量的内存地址是不一样的>>> id(var1)2084726354952>>> id(var2)208473024800834;k1k1& 改变var1第一层的数据 var2 不会跟的变换>>> var1[] = 123>>> var2{&39;: &39;, &39;: 2, &39;: [&39;, 456]}>>> var1[] = 234>>> var2{&39;: &39;, &39;: 2, &39;: [&39;, 456]}>>> var2[]&39;34;k3&39;k1&39;1&39;k2&39;k3&39;abck3&39;abc& 导入拷贝模块>>> import copy>>> var1 = {: , : 2, : [, 456]} var1和var2的内存地址是不相同的>>> id(var1)1706383946760>>> id(var2)170638985274434;k3k3k3& var1和var2的元素的内存地址是相同的>>> id(var1[][1])1706383265744>>> id(var2[][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]

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小冰创作整理编辑!