为什么从一个函数返回的这些元组是相同的?

Why are these tuples returned from a function identical?

假设我有一个函数:

def get_tuple():
    return (1,)

在空闲状态下,如果我调用:

get_tuple() is get_tuple()

它将打印True

如果我打电话:

(1,) is (1,)

它将打印False

你知道为什么吗? 我在 Python 文档中找不到解释。

可能是因为内存中的地址。只需尝试通过打印它们 print memory address of Python variable

Python 优化 return 值。
因为解释器很容易看出returned元组每次都是一样的,而且是不可变的对象,所以return是同一个对象(完全一样的。同一个内存地址)。
在这里,当你做 a is b 你实际上问 id(a) == id(b).

Python 的 CPython 实现存储函数中用作优化的常量值(例如数字、字符串、元组或冻结集)。您可以通过 func.__code__.co_consts:

观察它们
>>> def get_tuple():
...     return (1,)
...
>>> get_tuple.__code__.co_consts
(None, 1, (1,))

如您所见,对于此函数,存储常量 None(默认 return 值)、1(1,)。由于函数 return 是其中之一,因此每次调用都会得到完全相同的对象。

因为这是一个 CPython 实现细节,Python 语言不保证它。这可能就是您在文档中找不到它的原因:)