【问题标题】:list.remove(x) removes objects in more than this list [duplicate]list.remove(x) 删除超过此列表中的对象[重复]
【发布时间】:2017-01-28 18:53:40
【问题描述】:

当我想复制我的列表并尝试从一个列表中删除一个项目时,它也会在另一个列表中消失。你能给我一个理由吗?以及如何从一个列表中删除?

letter_list = ["A","B","C"]
same_letter_list = letter_list

print same_letter_list
print letter_list

same_letter_list.remove("B")

print same_letter_list
print letter_list

我的输出是:

['A', 'B', 'C']
['A', 'B', 'C']
['A', 'C']
['A', 'C']

我是编程新手。 感谢您的帮助!

【问题讨论】:

  • same_letter_list = letter_list 使same_letter_list 引用相同的列表。这里只有 1 个列表,有两个名称。
  • 这似乎与其他问题非常相似:stackoverflow.com/questions/8744113/…
  • 如果您是 Python 新手,为什么要从 Python 2 开始?从 Python 3 开始,Stack Overflow Python community 绝大多数是 recommendspython.org itself 也是如此。第 3 版是该语言的现在和未来,而第 2 版是过去。在先学习 2 的过程中,您会养成许多在学习 3 时需要纠正的坏习惯(最终您需要这样做),因此最好先从 3 开始,然后学习 2 中的差异稍后。
  • 另外,请不要同时使用python-2.7python-3.x 来标记问题,除非您询问两个版本之间的差异或类似内容。只需标记您正在使用的,由于print 语句,这显然是Py2。

标签: python arrays list python-2.7 python-3.x


【解决方案1】:

因为same_letter_listletter_list 是同一个列表。它引用了相同的内存。

如果你想把它们分开,复制一份

same_letter_list = letter_list.copy()

【讨论】:

    【解决方案2】:

    列表是一样的。您可以将其切片到另一个变量,以便它们不同。像这样:

    letter_list = ["A","B","C"]
    same_letter_list = letter_list[:]
    
    print same_letter_list
    print letter_list
    
    same_letter_list.remove("B")
    
    print same_letter_list
    print letter_list
    

    【讨论】:

      【解决方案3】:

      基本上letter_list和same_letter_list是同一个地址

      >>> letter_list = ["A","B","C"]
      ... same_letter_list = letter_list
      ... 
      >>> id(same_letter_list)
      1316298424
      >>> id(letter_list)
      1316298424
      

      它会给出一个新地址

      diff_letter_list = letter_list[:]
      id(diff_letter_list)
      1307621296
      

      【讨论】:

        猜你喜欢
        • 2012-01-09
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        • 2015-06-07
        • 2017-06-23
        • 1970-01-01
        • 2022-12-17
        相关资源
        最近更新 更多