鱼C论坛

 找回密码
 立即注册
查看: 2890|回复: 3

[已解决]is 和 == 疑惑

[复制链接]
发表于 2022-9-28 23:22:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
a = [123]
b = [123]

print(a is b)
print(a == b)
False
True


a = 123
b = 123

print(a is b)
print(a == b)
True
True


第二段为什么 a is b为True???
最佳答案
2022-9-28 23:48:25
is 是内存地址完全相等,可以用id()函数查看; ==只要值相等就行了

第一个 就是正常的分别创建了两个列表,因为列表是可变的,你又是分别创建的,不是用b=a这样的浅复制,所以这两个就是占用不同内存的两个列表,本质是不同的;
而第二个呢,我认为是内存中又热恩这个数,然后这个数字本身在内存里不会变的,所以当你重复创建一个相同大小的数时,它就不再重新分配内存空间,而是让a,b指向同一个地址上的值(毕竟当你用a=1来改变a的值时,不是改变了123这个地址上的值,而是把a指向了表示1的内存地址上了)。因此,对于同一个数,他们 用is也是相等的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-9-28 23:25:52 | 显示全部楼层
123因为是纯数字所以不独立占一段内存??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-28 23:42:24 | 显示全部楼层
is 判断是不是同一个。
>>> a = [123]
>>> c =a
>>> c is a
True

== 判断是不是相同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-28 23:48:25 | 显示全部楼层    本楼为最佳答案   
is 是内存地址完全相等,可以用id()函数查看; ==只要值相等就行了

第一个 就是正常的分别创建了两个列表,因为列表是可变的,你又是分别创建的,不是用b=a这样的浅复制,所以这两个就是占用不同内存的两个列表,本质是不同的;
而第二个呢,我认为是内存中又热恩这个数,然后这个数字本身在内存里不会变的,所以当你重复创建一个相同大小的数时,它就不再重新分配内存空间,而是让a,b指向同一个地址上的值(毕竟当你用a=1来改变a的值时,不是改变了123这个地址上的值,而是把a指向了表示1的内存地址上了)。因此,对于同一个数,他们 用is也是相等的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 23:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表