首页 > 解决方案 > 为什么迭代生成嵌套列表不会删除内部列表

问题描述

my_list = ['abc', 'def']

outer_list = []
for element in my_list:
    inner_list = []
    for ch in element:
        inner_list.append(ch)
    outer_list.append(inner_list)
print(outer_list)
# output [['a', 'b', 'c'], ['d', 'e', 'f']]

我的问题是,为什么这行得通?即,为什么不line inner_list = []删除inner_list 的先前实例?我认为这与outer_list 的范围在'for' 块之外有关。也许一旦 inner_list 占据了那里,它就与变量名分离了?这么近吗?

标签: pythonlistscope

解决方案


我建议您考虑这两种情况,并在评论中进行全面解释:

  1. 案例list = []

    my1stList = [1, 2 ,3, 4, 5]  # my1stList references  the list [1, 2 ,3, 4, 5]
    my2ndList = my1stList        # my2ndList references the same list as my1stList
    my1stList = []               # my1stList references another list (which is empty)
    print(my2ndList)             # it prints: [1, 2, 3, 4, 5]
    
  2. 案例list[:] = []

    my1stList = [1, 2 ,3, 4, 5]  # my1stList references the list [1, 2 ,3, 4, 5]
    my2ndList = my1stList        # my2ndList references the same list as my1stList
    my1stList[:] = []            # the list referenced by my1stList is emptied
    print(my2ndList)             # it prints: []
    

我希望您现在可以理解:您附加到的每个列表outer_list都不会被覆盖。只有它以前的参考inner_list改变了。


推荐阅读