这个问题已经在这里有了答案 :
分配后列表意外更改。如何克隆或复制它以防止这种情况? (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的元素随着原始元素的更新而不断变化。实际上,好像我正在使用