gpt4 book ai didi

python - 包含自身的列表 - 为什么重置其元素会影响第一级?

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:05 25 4
gpt4 key购买 nike

这感觉就像是等待发生的“罗素悖论”……:-)。我很确定这一定是一个众所周知的问题,但我没有找到很多关于此的讨论。

我在使用 python3。我意识到一个列表可以包含它自己

s = [1, 2, 3]
s[1] = s

结果为

s
#[1, [...], 3]

这会导致许多有趣的结果。例如,只是为了好玩:

s in s
#True

s[1][1][1][1][1][1][1] == s
#True

但现在最让我困惑的是:

id(s)
#2452848996168

id(s[1])
#2452848996168

好的。这是同一个对象。但是为什么

s[1] = 5

s
#[1,5,3]

id(s)
#2452848996168

所以如果s的id没有变化,而我只是把这个id的对象设置为5,为什么我得到的s不是5? python 是怎么知道在第 1 级设置第 2 个元素的?

更奇怪的是用

试试这个
s[1][1][1][1] = 5

你仍然得到

s
#[1, 5, 3]

我该如何解决这个问题?

最佳答案

您没有将具有该 ID 的对象设置为 5。您将列表的某个元素设置为 5。列表索引可以被认为是指向对象的“标签”或“指针”。在设置s[1] = 5时,您没有更改之前引用的对象s[1];您更改了 s[1] 指向的内容。

另一种思考方式是:最初你有 s = [1, 2, 3]。现在假设您执行 s[1] = 5。你是在“变2为5”吗?不,您只是将 s 从“我的第二个元素是这个数字 2”更改为“我的第二个元素是这个数字 5”。同样,在您的示例中,您只是将 s 从认为“我的第二个元素是我自己”更改为“我的第二个元素是数字 5”。

你后面的例子 s[1][1][1][1] = 5 是一样的,因为 s[1][1][1]s,因此您对 s[1][1][1] 所做的任何操作都与对 s 所做的相同。这可以用数学式的“证明”来表示:

s[1][1][1][1] = 5
(s[1][1][1])[1] = 5 # indexing operations group left to right
s[1] = 5 # substitute s for s[1][1][1] since they are the same

关于python - 包含自身的列表 - 为什么重置其元素会影响第一级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38285323/

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