当前位置: 首页 > 面试题库 >

原始清单已在python中修改[重复]

柴彬
2023-03-14
问题内容

这个问题已经在这里有了答案

分配后列表意外更改。如何克隆或复制它以防止这种情况? (21个回答)

5年前关闭。

我有一个简单的代码如下:

def swap(node):
    m00         = node[0][0]
    node[0][0]  = node[1][0]
    node[0][1]  = m00

originalList = [[1,2,3], [4,5,6], [7,8,9]]

# temp = list(originalList)
temp = originalList[:]

swap(temp)

print originalList

最初,我使用上面显示的值定义一个列表,然后将该列表复制到一个临时列表中。我尝试了两种复制方法。然后,我使用temp列表执行交换功能,然后再次打印原始列表。结果,原始列表被更改。这种行为背后的原因是什么?


问题答案:

originalList[:]复制 外部 列表,但复制3个较短的列表。您可以像这样复制它们:

temp = [x[:] for x in originalList]


 类似资料:
  • 问题内容: 通过查看的代码类,我才知道,当我们正在使用的方法或者它不是创建一个新的对象,但它返回同一个对象的引用,并覆盖其可以修改方法[ ,,,。 ..] 因此,我运行了此测试: 结果是。 现在的重点是为什么它指的是同一对象?为什么不创建新对象? 问题答案: (问题的答案在底部) 创建不可修改的列表时,其目的是不应 由您以外的其他人 (即API的客户端)对其进行修改。 该方法将创建一个新类型的对象

  • 问题内容: 如何在Java中初始化? 我知道这是一个接口,可以使用或实现,但是在初始化时会出现错误的不兼容类型: 那我该如何进行呢? 问题答案: 用 或从Java 1.7开始

  • 问题内容: 运行代码 退货 因此,每次在列表列表中每次更新元组(列表)的第一个参数,但第二个参数list [0]却没有更新。有人可以解释这里发生的事情并提出解决方法吗?我想输出 问题答案: 列表是可变类型-为了创建副本(而不只是传递相同的列表),您需要明确地这样做: 但是,已经是Python内置的名称-最好不要将该名称用作变量。这是一个不用作变量名并复制的版本: 请注意,我演示了两种不同的方法来复

  • 我正在C中实现合并排序。我有一个合并函数-和一个mergeSort函数-。 如果对原始数组的前半部分和后半部分进行排序(例如:),则合并排序可以很好地工作。这是因为我的merge函数无论在什么情况下都要传递原始数组,并且当它被赋予2个排序数组时(正如预期的那样),它可以工作。我的问题是他们什么时候不是。每次调用merge时,我的原始数组都没有被修改,尽管我已经对它进行了编程。有人能知道我的问题在哪

  • 我有一个二叉树与7个元素,目前看起来像这样: 我试图按后序遍历它,并在我去的时候重新定义元素,这样它看起来像这样: 使用以下函数,它是我的类: 我的类的其余部分与这里的差不多。我通过在循环中添加数字1-7来填充树。 但是,当我调用,然后打印树时,树是一样的。我猜这与Python传递参数的方式有关(我是一名C程序员),但我不知道如何解决这个问题。我的全部代码都可以在这里找到。

  • 问题内容: 我正在使用一个用于保存和调用屏幕状态的系统,这是我第一次弄这种东西,所以我不确定如何解决此问题的最佳方法是什么,但是我目前存储了所有“ PreviewMonitor”数组列表中的对象(大约40个左右)。问题是,当我创建要存储的名为“ allPreviewMonitors”的ArrayList的副本时,最终得到的ArrayList的元素随着原始元素的更新而不断变化。实际上,好像我正在使用