繁体   English   中英

更改另一个列表中的对象后,列表中的数据被修改

Data in the List gets modified after changing the object in another List

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

将对象添加到我的列表中后,我正在更改列表中的数据,它正在被修改我有类似的代码

List<Data> oldList = // initializing the list
List<Data> newList = // initializing the list

for (Data data: oldList) {
    if (condition) {
        data.setvalue("");
        newList.add(data);
        data.setAnother();
    }
}

如果我这样做, newList中的数据对象也会发生变化。

我有一个要求,它应该在oldList中更改,但它不应该更改newList中的数据。

1 个回复

如果您不希望 newList 中的对象在从newList更改对象时受到oldList ,则需要创建应添加到newList的每个对象的副本。

为此,您可以在Data类中实现一个复制构造函数(一个期望与参数相同类型的对象的构造函数)或使其实现Clonable接口(但这种方法有一些严重的缺陷,请参见此处 - 段落“复制构造函数与克隆” )。

假设您已经实现了一个copy-constructor ,您的代码可能会这样编写:

List<Data> oldList = // initializing the list
List<Data> newList = // initializing the list
    
for (Data data: oldList) {
    if (condition) {
        Data copyForNewList = new Data(data); // creating a copy of the data object
        copyForNewList.setvalue("");          // changing the copy
        newList.add(copyForNewList);          // string the copy
        data.setAnother();                    // mutating the original object
    }
}
5 原始列表在python中被修改[重复]

这个问题在这里已有答案: 如何克隆或复制列表? 15个答案 我有一个简单的代码如下: 最初,我使用上面显示的值定义列表,然后将此列表复制到临时列表。 我尝试了两种复制方法。 然后我使用temp列表执行交换功能并再次打印原始列表。 结果原始列表被更改。 ...

2015-11-13 21:51:32 2 113   python
6 第一个列表在添加另一个第二个列表后自动更新,然后在 Python 中更改第二个列表

请看一下这段代码 我的总和列表在循环中更新,如果新值符合条件,则应将其添加到坐标列表中。 问题是,在将总和列表附加到坐标列表之后,只要总和中的值发生变化,它们的坐标也会发生变化。 它们之间存在某种联系。 你能帮我解决这个问题吗? 我怎样才能取消它们的链接,以便只附加值并保持固定。 ...

7 对象中的列表被覆盖

经过一些工作,我完成了迷宫生成器的第一个算法,现在我试图使其在Pygame中可视化。 我首先让算法生成一个迷宫,然后对其进行可视化表示。 在这里,我遇到了多个问题,但我认为它们都与同一件事相关,那就是迷宫的第一个单元以某种方式被覆盖。 因此,我得到的完全不是迷宫,而是到处都是几行。 ...

8 在适配器上制作过滤器后如何将修改后的对象保留在列表中?

我会尽量直截了当。 我想要做的是在我的适配器上实现一个过滤器,修改一些对象属性,然后清理过滤器。 在这一点上,如果我再次过滤该对象将具有我所做的更改。 我遇到的问题是,当我过滤时,我对列表应用了清除。 这是我的适配器 这是我做一些过滤的时候 我想使用第二个列表,然后更新原始列表,对第一个列 ...

10 当遍历phyon中的列表时,该列表将被修改(非故意地)。

这个问题已经在这里有了答案: 在if语句中初始化的变量的作用域是什么? 7个答案 在遍历用户列表时,我只想打印词典中用户的名称以向他们表示祝贺,然后重复使用列表以打印尚未完成民意调查的用户。 为什么在用户的第一个for循环之后,列表是否被更改,或者由于我认为列表 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM