【发布时间】:2017-08-18 19:17:31
【问题描述】:
在以下示例中,Python 在内存中为命名空间中的所有三个名称 x、y 和 z 使用相同的整数对象
def main():
x = 0
y = 0
z = 0
print(x,y,z)
print(x is y is z)
y = 2
print(x,y,z)
print(x is y)
print(z is y)
print(x is z)
if __name__ == "__main__":main()
输出:
0 0 0
True
0 2 0
False
False
True
为什么 Python 在这里不使用相同的元组对象(是的,这是语言设计者的选择,但为什么),一个更好的问题是 python 何时在内存中创建新对象
def main():
a = 1, 2, 3
b = (1, 2, 3)
c = 1, 2, 3
print(type(a) == type(b))
print(a == b)
print(a is b)
print(a == c)
print(a is c)
if __name__ == "__main__":main()
输出:
True
True
False
True
False
【问题讨论】:
-
能否请您不要在您的问题中转储代码图片?总是有一个很好的选择,就是粘贴它。
-
当 Python 创建一个新对象时,是依赖于实现的。在实践中,字符串文字被重用,传递给
intern()的字符串被重用,小整数被重用,空元组被重用。在重用所有不可变对象和跟踪哪些不可变对象可重用之间需要权衡取舍。 -
@cᴏʟᴅsᴘᴇᴇᴅ:提问者知道
is和==之间的区别。问题是为什么元组是不同的对象,而不是为什么is和==报告不同的东西。 -
@PM2Ring 谢谢我从现在开始做
-
不要从现在开始,如果你edit现在你的问题对未来的访问者会更有用。
标签: python variable-assignment python-internals