gpt4 book ai didi

python - 为什么集合对象存储为卡住集而列表对象存储为元组?

转载 作者:行者123 更新时间:2023-12-01 12:02:19 25 4
gpt4 key购买 nike

我看到一篇博文提到“使用func.__code__.co_consts检查函数中定义的所有常量”

def func():
return 1 in {1,2,3}
func.__code__.co_consts
(None, 1, <b>frozenset</b>({1, 2, 3}))

为什么返回一个frozenset

def func():
return 1 in [1,2,3]
func.__code__.co_consts
(None, 1, <b>(1,2,3)</b>)

为什么它返回一个 tuple 而不是一个列表?从 __code__.co_consts 返回的每个对象都是不可变的。为什么可变常量不可变?为什么返回的元组的第一个元素总是 None

最佳答案

这是 Python Peephole optimizer 的结果

在“优化”下,它说:

BUILD_LIST + COMPARE_OP(in/not in): convert list to tuple
BUILD_SET + COMPARE_OP(in/not in): convert set to frozenset

参见 here了解更多信息:

“Python 通过预先计算常量表达式或转换某些数据结构来使用代码的窥孔优化”

尤其是关于“成员(member)测试”的部分:

“用于成员资格测试的 Python 是将可变数据结构转换为其不可变版本。列表被转换为元组,集合被转换为卡住集。”

关于python - 为什么集合对象存储为卡住集而列表对象存储为元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60691050/

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