gpt4 book ai didi

python - 具有相同列表的两个变量具有不同的 ID.....这是为什么?

转载 作者:太空狗 更新时间:2023-10-29 21:37:05 26 4
gpt4 key购买 nike

试图理解以下内容

为什么相同的列表,Python 分配的 ID 不同?

x = [1, 2, 3]
y = [1, 2, 3]

id(x) != id(y)
True

id(x)
11428848

id(y)
12943768

最佳答案

Python 中每个不同的对象 都有自己的 ID。它与内容无关——它与描述对象的信息的存储位置有关。存储在不同位置的任何不同对象都将具有不同的 ID。 (它是 sometimes ,但不是 always ,对象的内存地址。)

这对于理解可变对象尤其重要——即可以更改的对象,如列表。如果一个对象可以改变,那么你可以创建两个具有相同内容的不同对象。它们会有不同的 ID,如果您稍后更改一个,第二个将不会更改。

对于像整数和字符串这样的不可变对象(immutable对象),这不太重要,因为内容永远不会改变。即使两个不可变对象(immutable对象)具有不同的 ID,但如果它们具有相同的内容,则它们本质上是相同的。

这组想法非常深入。您可以将变量名视为分配给 ID 号的标签,而 ID 号又可以唯一标识一个对象。可以使用多个变量名称来标记同一对象。观察:

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> id(a)
4532949432
>>> id(b)
4533024888

那个,你已经发现了。现在让我们创建一个新的变量名:

>>> c = b
>>> id(c)
4533024888

没有创建新的对象。用 b 标记的对象现在也用 c 标记。当我们更改 a 时会发生什么?

>>> a[1] = 1000
>>> a
[1, 1000, 3]
>>> b
[1, 2, 3]

ab 是不同的,正如我们所知,因为它们具有不同的 ID。所以改变一个不会影响另一个。但是 bc 是同一个对象——还记得吗?所以……

>>> b[1] = 2000
>>> b
[1, 2000, 3]
>>> c
[1, 2000, 3]

现在,如果我为 b 分配一个新值,它不会改变对象本身的任何内容——只是它们被标记的方式:

>>> b = a
>>> a
[1, 1000, 3]
>>> b
[1, 1000, 3]
>>> c
[1, 2000, 3]

关于python - 具有相同列表的两个变量具有不同的 ID.....这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460234/

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