gpt4 book ai didi

引用自身的 Python 列表 - 它是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:31 24 4
gpt4 key购买 nike

当我在 python 中使用 = 运算符时,python 会为我创建一个对象(如果它不存在),然后将我的变量链接到它。所以

>>>a = 1
>>>b = a
>>>a = 2
>>>print(f'{a}, {b}')
2, 1

好像没问题。对于可变对象,当我改变一个对象时,指针仍然指向同一个对象,所以这也是可以的:

>>>a = []
>>>b = a
>>>a = a.append(1)
>>>print(f'{a}, {b}')
[1], [1]

现在如果我要做那件事会怎样:

>>>a = [1]
>>>a[0] = a
>>>print(f'{a}')

我期待的是无限链接,所以这应该会提供一些错误,但 python 会正常处理它,将 a 描述为 [[...]]。现在我可以访问任何深度的对象 a[0][0][0][0][0],它仍然是 [[...]]。实际上 [1] 应该在内存中的某个地方,但我无法访问它。

好吧,如果我现在做这个东西会发生什么:

>>>a[0][0][0] = 5

我希望 a 变成 [[[5]]] 或者它自己变成 5(很奇怪,但我可以说它有一定意义)。实际上,不。 a 变为 [5]。

谁能解释一下为什么?它是如何工作的?

最佳答案

注解发生了什么(a):

a = [1]    # Creates list object containing 1 and binds a to it.
a[0] = a # Changes the first element of that list to bind to a itself.

在那一点上,a[0]a[0][0] 和所有其他类似的引用列表的第一个元素,即一个。它是一个自引用绑定(bind),因此您可以根据自己的意愿多次使用它自己。 Douglas Hofstadter 会感到自豪 :-)

所以,现在当你执行 a[0][0][0][0][0] = 5 时,它与执行 a[0] = 5 这确实是你得到的:

>>> a[0][0][0][0] = 5
>>> a
[5]

(a) 这个对象和绑定(bind)行为,当 Python 开发人员第一次理解它时,真是大开眼界,并向他们介绍了语言底层机制的美妙之处:-)对我来说是一个真正的顿悟。

关于引用自身的 Python 列表 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58889359/

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