代码之家  ›  专栏  ›  技术社区  ›  George

以下两种方法有什么区别?[副本]

  •  -1
  • George  · 技术社区  · 6 年前

    在进行项目时,我遇到了以下两种列表形式:

    1)

    l1=[10]*2
    p1,p2=l1
    

    2)

    l2=[]
    for i in xrange(2):
       l2.append(10)
    p1,p2=l2
    

    两者似乎有相同的输出(如 l1=l2

    1 回复  |  直到 6 年前
        1
  •  0
  •   N Chauhan Nathan Hinchey    6 年前

    第一种方法意味着对象不会每次都被重新计算,但是数字总是指向一个新对象,所以这不会产生任何影响。但是,请注意:

    l = [[0] * 3] * 3
    

    这将使一个列表充满3个包含3个零的列表。现在尝试更改一个元素:

    l[0][0] = 1
    
    >>> l[0]
    [1, 0, 0]
    >>> l[1]
    [1, 0, 0]
    

    您还可以执行以下操作为什么要重新评估对象。

    l = [0 for _ in range(3)]