python深浅拷贝
发布时间:2020-12-20 12:46:20 所属栏目:Python 来源:网络整理
导读:目录 python深浅拷贝 一、引言 1.1 可变 or 不可变 二、拷贝 三、浅拷贝 四、深拷贝 总结 python深浅拷贝 一、引言 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把他赋值给另外一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个
目录
python深浅拷贝一、引言在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把他赋值给另外一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个对象的引用。 针对列表 注意:==拷贝、浅拷贝、深拷贝都是针对可变类型数据而言的== 1.1 可变 or 不可变id 不变值可变,即在原理的基础上修改,则为可变数据类型;值变id也变,即从新申请一个空间放入新值,则为不可变的数据类型。 age = 19 print('first:',id(age)) age = 20 print('second:',id(age)) #输出: first: 140731004973888 second: 140731004973920 x = 10 y = 20 print('x:',id(x),'y',id(y)) x,y = y,x print('x:',id(y)) #输出: x: 140731004973600 y 140731004973920 x: 140731004973920 y 140731004973600 二、拷贝如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着变化,因为可变类型值变id不变。 l1 = ['a','b','c',['d','e','f']] l2 = l1 l1.append('g') print(l1) #输出: ['a','f'],'g'] print(l2) #输出 : ['a','g'] 三、浅拷贝如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变。如果l1内的可变元素发生l改变,则l2会跟着改变。 import copy l1 = ['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 copy l1 = ['a','f']] l2 = copy.deepcopy(l1) l1.append('g') print(l1) #输出: ['a','f']] 总结
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |