Python浅拷贝与深拷贝如何使用
这篇“Python浅拷贝与深拷贝如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python浅拷贝与深拷贝如何使用”文章吧。
1.变量的赋值操作
只是多生成了一个变量,实际上还是指向同一个对象
# -*- coding: utf-8 -*- class CPU: pass class Disk: pass class Computer: def __init__(self, cpu, disk): # 给对象的实例属性进行初始化 self.cpu = cpu self.disk = disk # 变量的赋值 cp1 = Computer(cpu='CPU', disk='DISK') # 创建CPU类的实例对象 cp2 = cp1 # 变量的赋值,一个对象的实例采用两个变量存储,实际上还是指向一个对象 print(cp1, id(cp1)) print(cp2, id(cp2))
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
2.浅拷贝
Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象
# -*- coding: utf-8 -*- import copy class CPU: pass class Disk: pass class Computer: def __init__(self, cpu, disk): # 给对象的实例属性进行初始化 self.cpu = cpu self.disk = disk cpu = CPU() # 创建一个 CPU 类的实例对象 disk = Disk() # 创建一个Disk 类对象 computer = Computer(cpu, disk) # 创建一个Computer类的实例对象 # 浅拷贝 print(cpu) print(disk) computer2 = copy.copy(computer) # 子对象不拷贝 print(computer, computer.cpu, computer.disk) print(computer2, computer2.cpu, computer2.disk) # 类的浅拷贝: # Python的拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝 # 因此,源对象与拷贝对象会引用同一个子对象
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用
(如果用引用的方式修改其中一个对象,另外一个也会修改改变)
哪些是浅拷贝:
{1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}
3.深拷贝
使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同
# -*- coding: utf-8 -*- import copy class CPU: pass class Disk: pass class Computer: def __init__(self, cpu, disk): # 给对象的实例属性进行初始化 self.cpu = cpu self.disk = disk cpu = CPU() # 创建一个 CPU 对象 disk = Disk() # 创建一个硬盘类对象 computer = Computer(cpu, disk) # 创建一个计算机类对象 # 深拷贝 computer1 = copy.deepcopy(computer) print(computer, computer.cpu, computer.disk) print(computer1, computer1.cpu, computer1.disk) # 类的深拷贝 # 使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象 # 源对象和拷贝对象所有的子对象也不同
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象。
修改其中一个,另外一个不会改变。因此,新对象和原对象没有任何关联。
例如:{copy模块的deepcopy()函数}
以上就是关于“Python浅拷贝与深拷贝如何使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注蜗牛博客行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论