Python is 和id()

关于is和id()的疑惑

id()的官网描述:

返回对象的“身份”。这是一个整数,可以保证在此对象的生存期内唯一且恒定。具有不重叠生命周期的两个对象可能具有相同的id() 值。

is的官网描述

x is y : 当且仅当x和y是同一对象时才为true 。使用该功能确定对象的身份

从is的描述可以知道,如果x is y == True , 那么x和y指向的对象,肯定是同一个对象,而从id的描述可知,每个对象在其生存期都有一个唯一的‘身份’(id)

所以x和y的id必定相同

那么反过来,如果x 和 y的id相同,它们一定是同一个对象吗?

下面一句话给出了答案:

‘具有不重叠生命周期的两个对象可能具有相同的id() 值’

去掉修饰部分:两个对象可能具有相同的id() 值

怎么理解‘不重叠的生命周期’?

当对象被创建时,内部机制会为其分配内存空间。

如果在对象占用内存期间,创建另一个对象,系统又会为新的对象分配新的内存空间,那么它们的生命周期就是重叠的(因为同一时间里它们都占用着内存空间——占用内存的时间即为生命周期),因为分配的内存空间不同(指向不同的内存地址),这两个对象的id自然就不可能相同。

如果对象从内存释放,那么创建另一个对象时,它们的生命周期就是不重叠的,那么分配给前一个对象的内存空间就可能被复用,也就会造成不同的对象引用了同一个 id

所以采用id来判断两个对象是否是同一个对象,可能会得到不准确的结果。
如果非要用id进行判断,可以将两个对象分别绑定到变量名上,使两个对象的生命周期重叠再进行判断。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,"is"是一个同一性运算符,用于判断两个对象是否是同一个对象,即它们是否引用同一个内存地址。\[1\]与之相反,"=="是一个比较运算符,用于判断两个对象的值是否相等。\[2\]当我们需要判断两个对象是否是同一个对象时,可以使用"is"。例如,当我们需要判断两个变量是否引用同一个列表对象时,可以使用"is"。而当我们需要判断两个变量的值是否相等时,可以使用"=="。\[1\]需要注意的是,对于小的整数和短的字符串,Python会对相同的数据进行优化,将它们指向同一个对象,但它们的id是一样的。\[3\]因此,在使用"is"进行比较时,需要注意这种优化机制的存在。 #### 引用[.reference_title] - *1* *3* [Python 中 "is" 与 "==" 操作有什么区别?](https://blog.csdn.net/weixin_30575925/article/details/113649379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python 中 is 的使用](https://blog.csdn.net/SAKURASANN/article/details/102882383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值