首页 > 其他分享 >深浅拷贝

深浅拷贝

时间:2022-08-19 17:46:31浏览次数:37  
标签:ln 对象 深浅 ls print 拷贝 id

Python 的赋值语句不复制对象,而是创建目标和对象的绑定关系。

>>> a = 1
>>> id(a)
140731276990112
>>> b = a
>>> id(b)
140731276990112

上面的第行代码将值1的地址绑定给变量a

id(a)返回变量a中的值的内存地址

接下来语句b = a将变量a赋值给变量b,不会创建新的值,只会把变量a指向的内存地址绑定给变量b,这样a,b指向相同的内存地址,所以它们的id()相等。

对于自身可变,或包含可变项的集合,有时要生成副本用于改变操作,而不必改变原始对象。通过copy模块可以实现浅拷贝深拷贝

深浅拷贝的区别仅与复合对象(即包含列表或类的实例等其他相关对象)相关:

- 浅拷贝 构造一个新的复合对象,然后(尽可能的范围内)将原对象中找到的对象的引用插入其中。
- 深拷贝 构造一个新的复合对象,然后,递归的将再原始对象找到的对象的副本插入其中。

浅拷贝

>>> import copy
>>> ls = [1, 2, ['a', 'b']]
>>> ln = copy.copy(ls)
>>> print(id(ls), id(ln))
2930321101952 2930321101056
>>> print(id(ls[2]), id(ln[2]))
2930321100736 2930321100736

ls进行浅拷贝,会生成一个新的列表对象,所以lslnid()不相同。然后将ls里元素的引用插入ln中,所以ls[2]ln[2]id()相同。

这是修改ls的第三个元素,ln也会改变。

>>> ls[2][0] = 'A'
>>> print(ls)
[1, 2, ['A', 'b']]
>>> print(ln)
[1, 2, ['A', 'b']]

深拷贝

>>> import copy
>>> ls = [1, 2, ['a', 'b']]
>>> ln = copy.deepcopy(ls)
>>> print(id(ls), id(ln))
2930321640128 2930321101952
>>> print(id(ls[2]), id(ln[2]))
2930321100480 2930321100352

ls进行深拷贝,会生成一个新的列表对象,所以lslnid()不相同。然后将递归的将ls里元素的副本插入ln中,所以ls[2]ln[2]id()不相同。

标签:ln,对象,深浅,ls,print,拷贝,id
From: https://www.cnblogs.com/superwuchaofan/p/16562456.html

相关文章

  • 练习3:深浅拷贝实现
    Object.assign原理及其实现MDN:主要是将所有可枚举属性的值从一个或多个源对象复制到目标对象,同时返回目标对象。//第一步leta={name:"advanced",ag......
  • 【Pyhton】利用os进行文件拷贝
    【代码】#encoding=utf-8importosos.popen("copyc:\\java8\\src.zipC:\\Users\\ufo\\Desktop\\target.rar")【用途】将Java打包后的jar文件拷贝到桌面上并改名,......
  • PYTHON错误——”赋值“ 和 ”拷贝“
    #关于自己写的代码有个逻辑没有问题,但是代码有问题的错误。本质上是关于“拷贝”和“赋值”的错误。#我想将每次大循环后x["x1"]的结果保存到a中。#即:a:[[0,1],[0......
  • C/C++ 如何拷贝一个wchar_t类型的字符串
    1Dothis,23wchar_tclone[260];45wcscpy(clone,szPath);67Or,ifyouwanttoallocatememoryyourself,89wchar_t*clone=newwchar_t[wc......
  • 浅拷贝和深拷贝
    浅拷贝     functioncopy(obj){      letnewobj={}     for(letiinobj){        newobj[i]=obj[i]  ......
  • 误操作使用fdisk删除了/root所在分区,该如何把文件拷贝出来
    误操作fdisk命令误操作,将/root所在分区删除后新建了……恢复尝试1起初以为是改一下/etf/fstab就好了,于是进入急救模式,尝试chroot/mnt/sysimage将原系统挂在至/......
  • Java浅拷贝深拷贝
    Java浅拷贝深拷贝浅拷贝和深拷贝涉及到了Object类中的clone()方法  实现浅拷贝浅拷贝的实现需要类重写clone()方法浅拷贝会创建一个新对象,这个对象有着原始对象......
  • js中数组和对象的深拷贝
    数组和对象的深拷贝数组:1.res=queue.concat()2.res=queue.slice(0)3.遍历对象:1.JSON.parse(JSON.stringify(obj))2.{...obj}......
  • FFmpeg学习:frame的复制和拷贝
    实践中经常遇到frame的复制拷贝,特此记录一下;深拷贝连同数据也被复制一份浅拷贝只拷贝参数,具有相同的数据指针相关apiav_frame_ref()【函数原型】点击查看代码......
  • 拷贝构造函数
    c++中的拷贝构造函数调用时机通常有三种情况1.使用一个已经创建完毕的对象来初始化一个新的对象2.值传递的方式给函数参数传值3.以值方式返回局部对象//情况1classP......