java - 在实例化列表的变量中使用时,主列表值会发生变化

标签 java python arrays arraylist

如何创建一个不能更改其值的列表,例如,我在java中有一个for循环:

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
                if (i != j) {
                    List<Integer> vizinhoAplicacao = new ArrayList<>(ordemAcoes); //HERE
                    vizinhoAplicacao.set(i, vizinhoAplicacao.get(i) + 5);
                    vizinhoAplicacao.set(j, vizinhoAplicacao.get(j) - 5);
                    calcularRetornoAnual(vizinhoAplicacao, contatorVizinho, numeroSimulacao);
                    contatorVizinho++;
                }
            }
        }

ordemAcoes 的值在进入循环时始终保持不变, 但是当我使用 python 进行相同的场景时,当我对使用它声明的对象进行更改时,ordemAcoes 会发生变化,我想要做的不是更改 ordemAcoes 的值,这样每次我进入循环时,我都会与之前的值相同。

    for i in range(0, 5):
        for j in range(0, 5):
            if (i != j):
                neighborAplication = actionOrder #HERE is the list
                neighborAplication[i] = neighborAplication[i] + 5
                neighborAplication[j] = neighborAplication[j] - 5
                returnCalculateY(neighborAplication, countNeighbor, simulationNumber)
                countNeighbor += 1

Java 结果:

[35, 20, 20, 15, 10]
[35, 25, 15, 15, 10]
[35, 25, 20, 10, 10]
[35, 25, 20, 15, 5]

Python 的结果:

[35, 20, 20, 15, 10]
[40, 20, 15, 15, 10]
[45, 20, 15, 10, 10]
[50, 20, 15, 10, 5]

我希望在 python 中也能得到相同的结果,但是当我使用 neighborAplication 时,列表 actionOrder 值会发生变化。

最佳答案

问题在于

neighborAplication = actionOrder

您只是创建另一个名为 neighborAplication 的引用,并且
assignment never copies data 。当您改变 neighborAplicationactionOrder 时,两个名称都会发生变化,因为内存中只存在一个列表。

使用

neighborAplication = actionOrder[:]

为了创建列表的(浅)副本。

参见How to clone or copy a list?了解更多详细信息。

关于java - 在实例化列表的变量中使用时,主列表值会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133777/

相关文章:

c - 为什么这在 C(数组)中无效?

java - 如何在listview的列表项之间添加textview?

python - 检查是否虚拟化操作系统的可移植方法

python - iPython 调试器引发 `NameError: name ... is not defined`

python - 将字典转换为数据框

c# - 重新解释将数组从字符串转换为整数

java - 在 Android 中的两个 Activity 之间传递字符串数组时出现 NullPointer

java - Spring @Scheduler 并行运行

java - 如何从 Java 启动 msconfig.exe?

java - 在 Netbeans J2EE 项目中找不到服务方法