Python中的自我引用列表?

2024-05-29 00:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在分析python列表时,当我看到一些在其他编程语言中不可能实现的东西时,我感到惊讶。假设我有一个名为my_list的列表

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

下一次当我做

^{pr2}$

当我打印my_listmy_list[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就是{}。在

[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代码性能的。在python中实现my_list[9] = my_list的真正目的是什么?在

任何帮助将不胜感激。在


Tags: self列表mytypeit编程语言structconcept
2条回答

python中的列表只包含对对象的引用(如指针)。它们可以指任何物体,包括它们自己。在

这是可能的,因为列表(像其他容器一样)存储引用,为什么不存储自身的引用呢?在

为了避免无限递归,__str__/__repr__函数受到了保护,并显示了一个省略号(...)。在

为什么有可能?因为这不是不可能的。如果Python要阻止这种情况,那就意味着每次在列表中添加对象时都要检查自引用。这要么是用于维护引用缓存的额外O(n)存储开销,要么是用于执行引用搜索的O(n)时间开销。在

相关问题 更多 >

    热门问题