python深浅拷贝

python深浅拷贝,第1张

概述目录 python深浅拷贝 一、引言 1.1 可变 or 不可变 二、拷贝 三、浅拷贝 四、深拷贝 总结 python深浅拷贝 一、引言 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把他赋值给另外一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个对象的引用。 针对列表l1=[‘a‘,‘b‘,‘c‘,[‘d‘,‘e‘,‘f‘]]一般有三种方法,分别为:拷贝(赋值)、

目录

python深浅拷贝 一、引言 1.1 可变 or 不可变 二、拷贝 三、浅拷贝 四、深拷贝 总结 python深浅拷贝 一、引言

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把他赋值给另外一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个对象的引用。

针对列表l1=[‘a‘,‘b‘,‘c‘,[‘d‘,‘e‘,‘f‘]]一般有三种方法,分别为:拷贝(赋值)、浅拷贝、深拷贝。

注意:==拷贝、浅拷贝、深拷贝都是针对可变类型数据而言的==

1.1 可变 or 不可变

ID 不变值可变,即在原理的基础上修改,则为可变数据类型;值变ID也变,即从新申请一个空间放入新值,则为不可变的数据类型。

age = 19print('first:',ID(age))age = 20print('second:',ID(age))#输出:first: 140731004973888second: 140731004973920
x = 10y = 20print('x:',ID(x),'y',ID(y))x,y = y,xprint('x:',ID(y))#输出:x: 140731004973600 y 140731004973920x: 140731004973920 y 140731004973600
二、拷贝

如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着变化,因为可变类型值变ID不变。

l1 = ['a','b','c',['d','e','f']]l2 = l1l1.append('g')print(l1)#输出:['a','f'],'g']print(l2)#输出 :['a','g']
三、浅拷贝

如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变。如果l1内的可变元素发生l改变,则l2会跟着改变。

import copyl1 = ['a','f']]l2 = copy.copy(l1)l1.append('g')print(l1)#输出:['a','g']print(l2)#输出:['a','f']]l1[3].append('g')print(l1)#输出:['a','f','g'],'g']]
四、深拷贝

如果l2 是l1 的深拷贝对象,则l1内的不可变元素发生了改变,l2不变。

如果l1内的可变元素发生了改变,l2也不会改变,即l2 是永远不会因为l1 的变化而变化的。

import copyl1 = ['a','f']]l2 = copy.deepcopy(l1)l1.append('g')print(l1)#输出:['a','f']]

总结 牢记: 拷贝/浅拷贝/深拷贝 只针对可变数据类型 拷贝: 当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化,拷贝就是简单的赋值 浅拷贝:当lt2为lt的浅拷贝对象时,lt2不变化,实现用copy.copy() 可变数据的类型中的内置方法.copy() 深拷贝: 当lt2为lt的深拷贝对象时,lt2不变化;lt内的不可变类型变化,lt2不变 总结

以上是内存溢出为你收集整理的python深浅拷贝全部内容,希望文章能够帮你解决python深浅拷贝所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195379.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存