Python 不可变类型 ids 和 is 语句

标签 python string tuples immutable.js

我认为下面的所有内容都会评估为 False。有人能解释一下发生了什么事吗?不可变构造函数不会创建新对象(和新 id)吗?元组如何具有相同的 id 却是不同的对象?

print((1,) is (1,))
print(id(1,) == id(1,))
print('a' is 'a')
print(id('a') == id('a'))

结果:

False
True
True
True

最佳答案

您的第二行不正确。您正在将 1 传递给 id。 (Python 允许在参数列表中使用尾随逗号。)

print((1,) is (1,))
print(id((1,)) == id((1,)))
print('a' is 'a')
print(id('a') == id('a'))

哪些是

False
False
True
True

因此 idis 的结果匹配。


应该注意的是,is/id 的结果可能因实现而异。

例如,在 CPython 2.7 中,2 * 2 是 4,但 2 * 200 不是 400。对于低整数值,CPython 使用相同的内存地址(这是 CPython 中 id 的结果)。同样,这因实现而异。

关于Python 不可变类型 ids 和 is 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513781/

相关文章:

python - Pandas 数据框。根据其他列的非空值添加多个列

java - 如何在空格后不重复相同的记录

c++ - 这段代码如何从元组中提取参数?

c# - dictionary.TryGetValue 与 FirstOrDefault

python - 如何提取奇数字符长度的单词的后半部分

python - 如何将这些调用组合到 print()?

python - 安全与脚本

javascript - 使用 Number.isInteger() 方法得到错误的结果,javascript

java - 为什么我无法访问 2D ArrayList 的元素?

haskell - 我可以教 GHC 数学归纳法吗?