为什么这些元组从函数返回相同?

时间:2017-07-22 22:33:07

标签: python python-3.6

我们说我有一个功能:

def get_tuple():
    return (1,)

如果我打电话给IDLE:

get_tuple() is get_tuple()

它会打印True

如果我打电话:

(1,) is (1,)

它会打印False

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

3 个答案:

答案 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