gpt4 book ai didi

python - 发生了什么 b=a[ :] in python?

转载 作者:太空狗 更新时间:2023-10-29 20:46:06 26 4
gpt4 key购买 nike

    >>>a=[999999,2,3]
>>>b=[999999,2,3]
>>>print(a[0] is b[0])
False#because it works for numbers -5 through 256
>>>a=[1,2,3]
>>>b=a[:]
>>>print(a[0] is b[0])
True#because it works for numbers -5 through 256
>>>a=[999999,2,3]
>>>b=a[:]
>>>print(a[0] is b[0])
True#why not False ???

发生了什么 b=a[:](为什么不适用于数字 -5 到 256)?

最佳答案

-5 到 256 范围与 following 有关:

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object.

为了证明这一点,请注意 id(123) 如何保持返回相同的值,而 id(9999) 可以返回不同的值:

In [18]: id(123)
Out[18]: 9421736

In [19]: id(123)
Out[19]: 9421736

In [20]: id(9999)
Out[20]: 9708228

In [21]: id(9999)
Out[21]: 10706060

这当然是当前实现的产物。不同的 Python 实现可能不会这样做,或者可能使用不同的范围。

关于你的最后一个例子:

In [14]: a=[999999, 2, 3]

In [15]: b=a[:]

In [16]: map(id, a)
Out[16]: [10908252, 9421180, 9421168]

In [17]: map(id, b)
Out[17]: [10908252, 9421180, 9421168]

如您所见,[:] 只是复制引用。这解释了为什么 a[i] is b[i] 对所有 i 的计算结果为 True

关于python - 发生了什么 b=a[ :] in python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13539242/

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