2015-08-28 47 views
1

假设我跑的程序当你为自己添加一个列表时会发生什么?

x=[] 

x.append(x) 

print(x) 

我得到的[[...]]作为输出。但是这是什么意思?列表是否存储指针然后指向自己?还是它从未完全复制过自己?这个列表如何存储在内存中?

修订: 我试图让我的头围绕着python如何完成这个自我引用。如果我想设计一种存储允许自引用的列表的方式,我会将一个变量存储为一对值,即数据类型和值。如果数据类型是一个int,那么该值表示存储的整数,但如果数据类型是一个列表,我会说存储的值应该是一个指针,但指向哪里?列表的开始像C一样?

+0

如果列表是自己的一个元素,它是无限递归,所以不可能在平时的格式打印出来。 – khelwood

回答

1

Python列表包含对象的引用(类似于指针)。一个列表可以引用自己。只是不要尝试递归遍历列表,否则最终会出现堆栈溢出。

+3

...或结束堆栈溢出。 –

+0

为什么不是两个? :-) – IanAuld

0

我认为如果向列表中添加另一个元素,您所看到的输出将变得更加清晰。您有:

>>> x = [] 
>>> x.append(x) 
>>> x 
[[...]] 

如果我们其他值追加到x

>>> x.append(1) 

然后我们有:

>>> x 
[[...], 1] 

这里,[...]仅仅是Python的代表事实表的方式本身就是嵌入式的。

,当然还有:

>>> x[0] 
[[...], 1] 
>>> x[0][0][0] 
[[...], 1] 
>>> 
相关问题