Python-is和==区别,深浅拷贝

is和==区别

"""
id():在内存中存储的位置
type():变量的类型
value:值
==:type value
is:type value id
>>> a = '1'
>>> b = 1
>>> a == b  ##两个等号表示是否相等
False
>>> a = '1'
>>> b = a  ##一个等号表示赋值
>>> a is b
True
>>> a
'1'
>>> b
'1'
>>> li = [1,2,3]
>>> li1 = li  ##赋值
>>> li1
[1, 2, 3]
>>> id (li)
139852306285640
>>> id (li1)
139852306285640
>>> li2 = li.copy()  ##复制
>>> li2
[1, 2, 3]
>>> id(li2)
139852182734664
>>> li == li1
True
>>> li1 == li2
True
>>> li2 is li
False

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

深拷贝和浅拷贝的区别

 当一个变量a=x的时候 约定为:指向一个地址的过程
 浅拷贝:copy.copy()
 深拷贝:copy.deepcopy()

如果 copy.copy()拷贝的是元组 那么它不会进行浅拷贝 仅仅是指向
因为元组是不可变数据类型,意味着数据一定不能修改
因此它会自动判断为指向

导入拷贝模块

浅拷贝

 copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

深拷贝

 深拷贝,包含对象里面的子对象的拷贝, 原始对象的改变不会造成深拷贝里任何子元素的改变

拷贝列表
>>> import copy
>>> a = [11,22] 
>>> b = [33,44]
>>> c = [a,b]
>>> c
[[11, 22], [33, 44]]
>>> d = copy.copy(c)   
>>> d
[[11, 22], [33, 44]]
>>> id(c)
139640019670344
>>> id(d)
139640019670536
>>> id(c[0])
139640019630152
>>> id(a)
139640019630152
>>> id(d[0])
139640019630152

深拷贝
>>> e = copy.deepcopy(c)
>>> e
[[11, 22], [33, 44]]
>>> id(c)
139640019670344
>>> id(d)
139640019670536
>>> id(e)
139640019670472

>>> c.append([55,66])
>>> c
[[11, 22], [33, 44], [55, 66]]
>>> d    
[[11, 22], [33, 44]]
>>> e
[[11, 22], [33, 44]]
>>> 
>>> a.append(77,88)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)
>>> a.append([77,88])
>>> a
[11, 22, [77, 88]]
>>> c
[[11, 22, [77, 88]], [33, 44], [55, 66]]
>>> d
[[11, 22, [77, 88]], [33, 44]]
>>> e
[[11, 22], [33, 44]]
>>> 

拷贝元组
>>>  a = [11,22]
>>> b = [33,44] 
>>> c = (a,b)
>>> c
([11, 22], [33, 44])
>>> d = copy.copy(c)
>>> id(c)
139640019669064
>>> id(d)
139640019669064
>>> e = copy.deepcopy(c)
>>> id(e)
139640019660488
>>> id(c[1])
139640019630920
>>> id(d[1])
139640019630920
>>> id(e[1])
139640019630472
>>> a.append(66)
>>> a
[11, 22, 66]
>>> c
([11, 22, 66], [33, 44])
>>> d
([11, 22, 66], [33, 44])
>>> e
([11, 22], [33, 44])
>>> 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述浅拷贝:只会拷贝最外层的id地址,开辟新的地址空间
内层的列表指向依然是原来的地址
所以改变内层列表他还是会改变的
浅拷贝copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

在这里插入图片描述
深拷贝,包含对象里面的子对象的拷贝, 原始对象的改变不会造成深拷贝里任何子元素的改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值