python明明两个一样的一句话为什么会不相等_Python对象的比较、拷贝

本文详细探讨了Python中对象的比较,包括'=='和'is'的区别。'=='关注值的相等,而'is'检查对象的ID。此外,解释了浅拷贝(shallow copy)和深拷贝(deep copy)的概念,通过示例展示了它们的不同以及可能的副作用。文章强调,浅拷贝仅拷贝对象的引用,而深拷贝则递归创建全新的对象。最后,提出了思考题,邀请读者思考'=='比较无限嵌套列表的结果。
摘要由CSDN通过智能技术生成
78ea53235bb0e06e8b2d0fc724d96038.png

在前面的学习中,我们其实已经接触到了很多 Python 对象比较和复制的例子,比如下面这个,判断 a 和 b 是否相等的 if 语句:

if a == b:    ...复制代码

再比如第二个例子,这里 l2 就是 l1 的拷贝。

l1 = [1, 2, 3]l2 = list(l1)复制代码

但你可能并不清楚,这些语句的背后发生了什么。比如,

  • l2 是 l1 的浅拷贝(shallow copy)还是深度拷贝(deep copy)呢?
  • a == b是比较两个对象的值相等,还是两个对象完全相等呢?

关于这些的种种知识,我希望通过这节课的学习,让你有个全面的了解。

'==' VS 'is'

等于(==)和 is 是 Python 中对象比较常用的两种方式。简单来说,'=='操作符比较对象之间的值是否相等,比如下面的例子,表示比较变量 a 和 b 所指向的值是否相等。

a == b复制代码

而'is'操作符比较的是对象的身份标识是否相等,即它们是否是同一个对象,是否指向同一个内存地址。

在 Python 中,每个对象的身份标识,都能通过函数 id(object) 获得。因此,'is'操作符,相当于比较对象之间的 ID 是否相等,我们来看下面的例子:

a = 10b = 10 a == bTrue id(a)4427562448 id(b)4427562448 a is bTrue复制代码

这里,首先 Python 会为 10 这个值开辟一块内存,然后变量 a 和 b 同时指向这块内存区域,即 a 和 b 都是指向 10 这个变量,因此 a 和 b 的值相等,id 也相等,a == b和a is b都返回 True。

不过,需要注意,对于整型数字来说,以上a is b为 True 的结论,只适用于 -5 到 256 范围内的数字。比如下面这个例子:

a = 257b = 257 a == bTrue id(a)4473417552 id(b)4473417584 a is bFalse
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值