python中的自引用列表?

在分析python列表时,当我看到其他编程语言无法做到的事情时,我感到很惊讶。可以说我有一个名为my_list


my_list = [1,2,3,4,5,6,7,8,9,10] 

接下来,当我像


my_list[9] = my_list  #I didn't seen such things possible in C/C++

而当我打印的my_list,my_list[9]并且my_list[9][9],所有这些给出了相同的结果。


my_list

[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]

my_list[9]

[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]

my_list[9][9]

[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]

我的理解是,my_list[9]是指同一个列表称为my_list和[...]手段自我指涉列表即列表指向同一个列表,当你按照type(my_list[9])它给我type的list。


[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]

                              |

             Does it like self referential struct pointer concept of C ?

在上面的my_list示例中,我只是添加了简单的测试运行。我想知道类似的事情如何my_list[9] = my_list使python代码性能更好。my_list[9] = my_list在python中使之成为可能的背后的实际意图是什么?


任何帮助将不胜感激。


SMILET
浏览 161回答 2
2回答

慕雪6442864

可能是因为列表(与其他容器一样)存储了引用,但为什么不引用自身呢?该__str__/__repr__功能已经得到保护,免受会造成死循环,并显示一个省略号代替(...)。为什么有可能呢?因为这不是不可能的。如果Python要防止这种情况发生,则意味着每次在列表中添加对象时都要检查自引用。这可能是用于维护参考高速缓存的额外O(n)存储开销,也可能是用于执行参考搜索的O(n)时间开销。

精慕HU

python中的列表除了引用对象(如指针)外不包含任何内容。他们可以引用包括自己在内的任何对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python