gpt4 book ai didi

python - Python 什么时候为空列表创建新的列表对象?

转载 作者:太空狗 更新时间:2023-10-29 17:18:58 26 4
gpt4 key购买 nike

以下内容对我来说很有意义:

>>> [] is []
False

鉴于列表是可变的,我希望 [] 每次出现在表达式中时都是一个新的空列表对象。然而,使用这个解释,以下内容让我感到惊讶:

id([]) == id([])
True

为什么?什么解释?

最佳答案

在第一个示例中,[] 不完全是 []因为列表是可变的。如果不是,他们可以毫无问题地安全地映射到同一个。

在第二个示例中,id([]) 创建一个列表,获取 id,然后释放列表。第二次它创建了一个列表,但是“把它放在同一个地方”因为没有发生其他事情。 id 仅在对象的生命周期内有效,在这种情况下,它的生命周期几乎为零

来自docs on id :

This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value.


注释反汇编:

   0 LOAD_GLOBAL              0 (id)    # load the id function
3 BUILD_LIST 0 # create the first list
6 CALL_FUNCTION 1 # get the id
9 LOAD_GLOBAL 0 (id) # load the id function
12 BUILD_LIST 0 # create the second list
15 CALL_FUNCTION 1 # get the id
18 COMPARE_OP 2 (==) # compare the two ids
21 RETURN_VALUE # return the comparison

注意没有 STORE_FAST 来保留列表。因此,它在传递给 id 函数后立即被丢弃。

关于python - Python 什么时候为空列表创建新的列表对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21948712/

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