我们说我有一个功能:
def get_tuple():
return (1,)
如果我打电话给IDLE:
get_tuple() is get_tuple()
它会打印True
如果我打电话:
(1,) is (1,)
它会打印False
答案 0 :(得分:17)
Python的CPython实现将函数中使用的常量值(例如数字,字符串,元组或frozensets)存储为优化。您可以通过func.__code__.co_consts
:
>>> def get_tuple():
... return (1,)
...
>>> get_tuple.__code__.co_consts
(None, 1, (1,))
如您所见,对于此函数,常量None
(默认返回值),1
和(1,)
被存储。由于函数返回其中一个函数,因此每次调用都会获得完全相同的对象。
因为这是一个CPython实现细节,所以Python语言无法保证。这可能是你无法在文档中找到它的原因:))
答案 1 :(得分:6)
Python优化了返回值
因为解释器很容易看到返回的元组每次都是相同的,并且它是一个不可变对象,它返回相同的对象(完全相同的一个。相同的内存地址)。
在这里,当您执行a is b
时,您实际上会问id(a) == id(b)
。
答案 2 :(得分:0)
也许是因为内存中的地址。只是尝试通过打印它们 print memory address of Python variable