首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的自引用列表?

python中的自引用列表?
EN

Stack Overflow用户
提问于 2018-06-20 19:05:43
回答 2查看 709关注 0票数 2

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

代码语言:javascript
复制
my_list = [1,2,3,4,5,6,7,8,9,10] 

下一个当我做的时候

代码语言:javascript
复制
my_list[9] = my_list  #I didn't seen such things possible in C/C++

当我打印my_listmy_list[9]my_list[9][9]时,所有这些结果都是一样的。

代码语言:javascript
复制
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])相同的列表的自引用列表,它给出了typelist

代码语言:javascript
复制
[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背后的实际意图是什么?

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-20 20:09:01

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2018-06-20 19:07:34

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50955371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档