在分析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代码的性能。在python中,这个my_list[9] = my_list背后的实际意图是什么?
任何帮助都将不胜感激。
发布于 2018-06-20 20:09:01
这是可能的,因为列表(像其他容器一样)存储引用,为什么不自己存储引用呢?
__str__ / __repr__函数受到保护以避免无限递归,并显示省略号(...)。
为什么是可能的?因为这不是不可能的。如果Python要阻止这种情况,那就意味着每次在列表中添加对象时都要检查是否存在自引用。这要么是用于维护引用缓存的额外O(n)存储开销,要么是用于执行引用搜索的O(n)时间开销。
发布于 2018-06-20 19:07:34
python中的列表只包含对对象的引用(如指针)。他们可以指任何对象,包括他们自己。
https://stackoverflow.com/questions/50955371
复制相似问题