在分析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中成为可能的背后的实际意图是什么?
任何帮助将不胜感激。
答案 0 :(得分:1)
除了引用对象(如指针)外,python中的列表不包含任何内容。他们可以引用任何对象,包括他们自己。
答案 1 :(得分:1)
可能是因为列表(如其他容器)存储了引用,为什么不引用自身呢?
def get_similarity(sequence_1, sequence_2)
lcs_length = Diff::LCS::Internals.lcs(sequence_1, sequence_2).compact.length
lcs_length.to_f * 2 / (sequence_1.length + sequence_2.length)
end
/ __str__
函数已受到保护,可避免无限递归,并显示省略号(__repr__
)。
为什么有可能?因为这不是不可能的。如果Python要防止这种情况发生,则意味着每次在列表中添加对象时都要检查自引用。这可能是用于维护参考高速缓存的额外O(n)存储开销,或者是用于执行参考搜索的O(n)时间开销。