gpt4 book ai didi

python - 在元组上调用元组时的元组身份

转载 作者:行者123 更新时间:2023-11-28 17:41:04 25 4
gpt4 key购买 nike

我假设 tuple(tuple_instance) 应该(作为优化)能够在不制作副本的情况下返回输入元组。事实证明,在 CPython 上,这似乎是这种情况:

>>> t = ('foo', 'bar', 'baz')
>>> v = tuple(t)
>>> v is t
True

到目前为止还不错。但是,仔细阅读源代码,我看到有 PyTuple_MAXSAVESIZE 可能会来这里玩。让我们尝试更大的元组:

>>> t = ('foo', 'bar', 'baz') * 100
>>> v = tuple(t)
>>> v is t
True

这似乎也有效。

我的主要问题是这种行为在 CPython 中是否总是如此。我看了PyTuple_New ,但是我在那里看不到任何可以解释我在这里看到的东西的东西,所以必须在其他地方定义这种行为(或者我错过了它......我的 C 在这一点上已经相当萎缩......)。

最佳答案

好的,所以调用顺序是:

tuple_new最后调用 PySequence_Tuple。 PySequence_Tuple有内置的优化,如果它是一个元组(不是元组子类),它只返回元组(参见带有 PyTuple_CheckExact 的行,它实际上是一个 macro ...)

所以,总而言之,当前(CPython2.7.7)在 tuple 实例上调用 tuple 将返回输入实例 iff 输入元组的类型 tupletuple 的子类将被复制。

似乎还有一个优化列表的路径。这也可能涵盖 tuple 子类,但我没有深入研究。

关于python - 在元组上调用元组时的元组身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com