id居然不等!!!!》》》
a =# b =
b = a
id(a) == id(b)
这个id是相等的我知道,结果为Ture
但是!!!!
a =
b =
id(a) == id(b)
这个id居然是不等的啊 !!!???我感觉自己内存地址的内容白学了{:10_301:} 因为在Python的内部,a和b是两个完全不同的变量,值相等并不意味着id相等
详细讲解:
在Python的内部有一个类似于一个储存器的东西
你在定义和赋值变量a的时候,Python为这个变量专门开辟一段空间为存储变量a
第一段代码的底层步骤其实是将变量b的指向变量a的地址。所以,当你改变变量a的值的时候,变量b的值也会改变;在改变变量b的值的时候,变量a的值也会改变。因为在底层,它们都指向同一个地址,只不过名字不同罢了。你可以把他们当作是一体的,不是两个独立的变量
而第二段代码,他们是两个两个独立的变量,他们两个指向的内存地址都是不同的,所以它们互不影响。Python为它们两个开辟了不同的两个空间 本帖最后由 hrpzcf 于 2021-11-6 19:38 编辑
第二个为什么要相同?两个不同的实例,id肯定不相同(除了一些Python优化过的实例) id() 用于获取对象的内存地址,明显 a 和 b 不同内存地址(只是值相同而已) 我的钱包里有100元,我朋友钱包也有100,所以朋友的钱就是我的钱,成功解锁财富密码。 suchocolate 发表于 2021-11-6 19:51
我的钱包里有100元,我朋友钱包也有100,所以朋友的钱就是我的钱,成功解锁财富密码。
这句话,真的强啊,简而易懂{:5_109:} hash相等 id才能相等
元组和字符串数字都能hash
列表可以hash吗 每个对象都有一个自己的身份(Identity),而 hash 值如同对象的另外一个身份,但不是所有对象都有 hash 值。相同 hash 值,意味着相同身份(Identity),也相同值。 suchocolate 发表于 2021-11-6 19:51
我的钱包里有100元,我朋友钱包也有100,所以朋友的钱就是我的钱,成功解锁财富密码。
为什么不是1亿??
嘉岳呀 发表于 2021-11-6 21:08
为什么不是1亿??
我暂时没有那么多钱,等我慢慢找到越来越有钱的朋友的。 Python中每个值都有自己唯一的ID,不可能重复,除非:
a = 2,3,4
b = a
此时它们对应的才是同一个值:2,3,4 Robot_Steve 发表于 2021-11-7 09:12
因为在Python的内部,a和b是两个完全不同的变量,值相等并不意味着id相等
详细讲解:
那么如你所说,请问
a = (1, 2, 3)
b = (1, 2, 3)
这俩者是不是储存在不同地方呢?Python 会专门开辟一段空间为储存这两个变量吗?{:5_94:} 傻眼貓咪 发表于 2021-11-7 09:19
那么如你所说,请问
a = (1, 2, 3)
肯定会啊 suchocolate 发表于 2021-11-6 22:14
我暂时没有那么多钱,等我慢慢找到越来越有钱的朋友的。
hhh...... Robot_Steve 发表于 2021-11-7 09:23
肯定会啊
错,答案是不会,a 和 b 储存在同样地址,如:a = (1, 2, 3)
b = (1, 2, 3)
if a is b:
print("a is b")
print(id(a), id(b))
else:
print("a not b")
print(id(a), id(b))输出结果:a is b
2435208255168 2435208255168以上两者 id 相同,用 Python is 判断符 来判断,俩者皆为同个地址 Robot_Steve 发表于 2021-11-7 09:12
因为在Python的内部,a和b是两个完全不同的变量,值相等并不意味着id相等
详细讲解:
你的解说不错,但是只对一半,不是所有类型变量都会开辟新空间储存的 傻眼貓咪 发表于 2021-11-7 10:06
错,答案是不会,a 和 b 储存在同样地址,如:输出结果:以上两者 id 相同,用 Python is 判断符 来判断 ...
>>> a = (1, 2, 3)
>>> b = (1, 2, 3)
>>> a is b
False
>>> print(id(a), id(b))
483860010560 483859711616
>>>
事实上并不是 Robot_Steve 发表于 2021-11-7 11:04
事实上并不是
你这是在 Python IDLE 上执行(也就是 tkinterGUI 为基础)其内存位置不一样吧? Robot_Steve 发表于 2021-11-7 11:04
事实上并不是
你可以试试先将代码储存为 py,再试试用 Python IDLE 打开执行 run 看看,你就明白我说的 傻眼貓咪 发表于 2021-11-7 10:06
错,答案是不会,a 和 b 储存在同样地址,如:输出结果:以上两者 id 相同,用 Python is 判断符 来判断 ...
谢谢了,结果更离谱了...
在Shell里运行和运行文件的结果完全相反
页:
[1]
2