在分析python列表时,当我看到一些在其他编程语言中不可能实现的东西时,我感到惊讶。假设我有一个名为my_list
的列表
my_list = [1,2,3,4,5,6,7,8,9,10]
下一次当我做
^{pr2}$当我打印my_list
、my_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
的真正目的是什么?在
任何帮助将不胜感激。在
python中的列表只包含对对象的引用(如指针)。它们可以指任何物体,包括它们自己。在
这是可能的,因为列表(像其他容器一样)存储引用,为什么不存储自身的引用呢?在
为了避免无限递归,
__str__
/__repr__
函数受到了保护,并显示了一个省略号(...
)。在为什么有可能?因为这不是不可能的。如果Python要阻止这种情况,那就意味着每次在列表中添加对象时都要检查自引用。这要么是用于维护引用缓存的额外O(n)存储开销,要么是用于执行引用搜索的O(n)时间开销。在
相关问题 更多 >
编程相关推荐