开发者

Python中的复制、浅拷贝与深拷贝解读

开发者 https://www.devze.com 2023-11-19 13:36 出处:网络 作者: 惊瑟
目录1.对象的三要素2.==和is3.可变对象/不可变对象4.赋值、浅拷贝与深拷贝1.对象的三要素
目录
  • 1.对象的三要素
  • 2.==和is
  • 3.可变对象/不可变对象
  • 4.赋值、浅拷贝与深拷贝

1.对象的三要素

id、type以及value,id唯一标识一个对象,相当于地址,id一样,说明就是同一个东西。type和value就是字面意思。

2.==和is

==比较的是value,is比较的是id,意思是  “是否为同一个对象”,条件比==要严格。

3.可变对象/不可变对象

python一切均是对象,不可变对象有:数字、字符串、元组等,为什叫不可变对象呢?难道我不能为一个整形KJlsOZsoM变量重新赋值?相信一定也有这种疑问,下面看个例子:

Python中的复制、浅拷贝与深拷贝解读

看的出来,为a重新赋值,其实是令a指向了另一个对象,字符串,元组也一个道理,对指向此类对象的变量做修改,只是使其指向了另外一个对象。

而对于可变对象,如list,如下图所示,修改后id不变,还是这个东西

Python中的复制、浅拷贝与深拷贝解读

4.赋值、浅拷贝与深拷贝

对于不可变对象,这三者作用一样,均是使得新变量指向这个不www.devze.com可变对象,因此id都是一样的:

Python中的复制、浅拷贝与深拷贝解读

对于可变对象,赋值是最简单省事的,如b=a,意思是直接使得a指向b代表http://www.devze.com的对象,两者id一样,指向同一个编程客栈对象,一个修改,另一个也随之变化:

Python中的复制、浅拷贝与深拷贝解读

而浅拷贝copy.copy则是另外新建出一个对象,如a=[1,2,[1,2]],b=copy.copy(a),a与b的id不同,但里面内容所指还是相同,比如a[2]和b[2]仍然指向同一个对象,修改其中一个,另外一个也会变:

Python中的复制、浅拷贝与深拷贝解读

深拷贝则是完全复制一份,还是上面那个例子,深拷贝后,非但a和b的id不同。连里面的对象id也不同(不可变对象除外),一个修改并不会影响另一个,如下图:

Python中的复制、浅拷贝与深拷贝解读

以上为个人拙见,如有不对,还望指出。

到此这篇关于Python中的复制、浅拷贝与深拷贝解读的文章就介绍到这了,更多相关Python复制与浅拷贝与深拷贝内php容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号