首页 / PYTHON / Python深浅拷贝
Python深浅拷贝
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python深浅拷贝,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1503字,纯文字阅读大概需要3分钟。
内容图文
Python深浅拷贝
一、引言
在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用
针对该列表l1=['a','b','c',['d','e','f']]一般有三种方法,分别为:拷贝(赋值)、浅拷贝、深拷贝
注意:拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的
1.1可变or不可变
id不变值可变,即在原值的基础上修改,则为可变数据类型;值变id也变,即重新申请一个空间放入新值,则为不可变数据类型。
age = 19 print(f'first:{id(age)}') age = 20 print(f'second:{id(age)}') 输出 first:4384901776 second:4384901808
二、拷贝
如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变。
l1 = ['a', 'b', 'c', ['d', 'e', 'f']] l2 = l1 l1.append('g') print(l1) print('-'*50) print(l2)
输出
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
三、浅拷贝
如果l2是l1的浅拷贝对象,那么l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变。
import copy l1 = ['a', 'b', 'c', ['d', 'e', 'f']] l2 = copy.copy(l1) l1.append('g') print(l1)
输出
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
print(l2)
输出
['a', 'b', 'c', ['d', 'e', 'f']]
l1[3].append('g')
print(l1)
输出
['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
print(l2)
输出
['a', 'b', 'c', ['d', 'e', 'f', 'g']]
四、深拷贝
如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。
import copy l1 = ['a', 'b', 'c', ['d', 'e', 'f']] l2 = copy.deepcopy(l1) l1.append('g') print(l1)
输出
['a', 'b', 'c', ['d', 'e', 'f'], 'g']
print(l2)
输出
['a', 'b', 'c', ['d', 'e', 'f']]
l1[3].append('g')
print(l1)
输出
['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
print(l2)
输出
['a', 'b', 'c', ['d', 'e', 'f']]
内容总结
以上是互联网集市为您收集整理的Python深浅拷贝全部内容,希望文章能够帮你解决Python深浅拷贝所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。