【问题标题】:Regarding python list with reference [duplicate]关于参考的python列表[重复]
【发布时间】:2013-11-10 05:39:52
【问题描述】:

示例如下:

>>> x = ["a","b","c"]
>>> yy = [x] * 3
>>> yy
[['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']]
>>> yy[0][0] = 'A'
>>> yy
[['A', 'b', 'c'], ['A', 'b', 'c'], ['A', 'b', 'c']]
>>>

当我执行yy[0][0] = 'A' 时,它替换为子列表的所有第一个元素。我从这里得到的是当我做[x] * 3 时,它会创建一些对列表x 的引用,但不确定它是如何工作的。谁能解释一下?

【问题讨论】:

    标签: python list reference


    【解决方案1】:

    [x]*3 创建对同一个列表的 3 个引用。您必须创建三个不同的列表:

    >>> yy = [list('abc') for _ in range(3)]
    >>> yy[0][0]='A'
    >>> yy
    [['A', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']]
    

    第一行使用循环 3 次的列表推导创建一个新列表。

    使用id(),您可以看到重复的相同列表引用:

    >>> x=list('abc')
    >>> id(x)
    67297928                                  # list object id
    >>> yy=[x]*3                              # create a list with x, duplicated...
    >>> [id(i) for i in yy]
    [67297928, 67297928, 67297928]            # same id multipled
    >>> yy = [list('abc') for _ in range(3)]  
    >>> [id(i) for i in yy]
    [67298248, 67298312, 67297864]            # three different ids
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多