Python初始化列表列表[重复]

发布于 2021-02-02 23:16:52

我打算初始化一个长度为n的列表列表。

x = [[]] * n

但是,这以某种方式将列表链接在一起。

>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]

我希望有这样的东西:

[[], [0], []]

有任何想法吗?

关注者
0
被浏览
76
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    问题在于它们在内存中都是完全相同的列表。当使用[x]*n语法时,得到的是n许多x对象的列表,但是它们都是对同一对象的引用。它们不是不同的实例,而是n对同一实例的引用。

    要列出3个不同的列表,请执行以下操作:

    x = [[] for i in range(3)]
    

    这为你提供了3个单独的实例[],这是你想要的

    [[]]*n类似于

    l = []
    x = []
    for i in range(n):
        x.append(l)
    

    虽然[[] for i in range(3)]类似于:

    x = []
    for i in range(n):
        x.append([])   # appending a new list!
    
    In [20]: x = [[]] * 4
    
    In [21]: [id(i) for i in x]
    Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object
    
    
    In [22]: x=[[] for i in range(4)]
    
    In [23]: [id(i) for i in x]
    Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看