Python的列表和字典可以无限嵌套吗?

2 投票
3 回答
1180 浏览
提问于 2025-04-17 21:06

最近我发现,Python中的列表和字典可以嵌套多层,就像这样:

a = {'a1':[{'a2':{'a3':[4,5,6]}}]}

所以我想问一下,嵌套的层数有没有技术上的限制?如果没有,那有没有一个常规的嵌套层数限制呢?这个限制是什么?

3 个回答

1

你甚至可以创建一个无限循环:

>>> l = [1]
>>> l.append(l)
>>> l
[1, [...]]
>>> l[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1]
[1, [...]]
>>> 
2

其实,你可以创建的数据结构的嵌套层数没有真正的限制(除了它占用的内存),但是在你的代码中,直接写出一个嵌套得很深的数据结构是有一定限制的。举个例子,看看这个简单的测试:

>>> eval(70*'['+70*']')
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
>>> eval(80*'['+80*']')
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]        
>>> eval(90*'['+90*']')
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
>>> eval(100*'['+100*']')
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

这个测试并没有耗尽总内存,但在解析这个数据结构的时候,栈空间用完了。你可以创建这么深的嵌套列表,只是不能直接在源代码里写出来。

那你会想这样做吗?一般来说不会。也许你想手动创建一个链表,这可能是需要创建一个深度嵌套结构的原因。

6

唯一的限制就是内存。如果你有无限的内存,你可以无限地嵌套Python对象。

示例:

>>> root = lst = []
>>> levels = 0
>>> while True:
...     lst.append([])
...     lst = lst[-1]
...     levels += 1
...     if levels % 1000000 == 0:  # every 1 million
...         print levels
... 
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
11000000
# ....
# [ slower and slower as the system starts to swap ]
# ....
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

为了我的心理健康,我在创建了3000万个对象后就停止了。

撰写回答