Java 当在实例化列表的变量中使用时,主列表值会更改

Java 当在实例化列表的变量中使用时,主列表值会更改,java,python,arrays,arraylist,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

如何创建一个不能更改其值的列表,例如,我有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++;
                }
            }
        }
结果为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中也有相同的结果,但是当我使用NeightraApplication时,list actionOrder值会发生变化。

问题在于

neighborAplication = actionOrder
您正在创建另一个名为
neightrapplication
的引用,并且
. 当您改变
邻域应用程序
操作顺序
时,将在两个名称之间看到更改,因为内存中只存在一个列表

使用

以创建列表的(浅)副本


有关更多详细信息,请参阅。

Longshot:Do
NeightraApplication=actionOrder[:]
修复它吗?我将尝试此选项谢谢!我会写一个答案来解释为什么这可以解决问题——如果它解决了问题的话。:)问题在于,您可以通过执行
newarraylist(ordemAcoes)
在Java中创建新列表。当您更改此列表时,它将不会触及
ordemAcoes
。在Python中,只需将列表分配给一个新变量。因此,当您变异
邻域应用程序时,实际上是在变异与
操作顺序
相同的列表。因此,您需要先创建
actionOrder
列表的副本,然后再对其进行修改。请参阅本文,了解如何用Python修复它:是的,我设法理解了这种关系,谢谢,timgeb提供的选项非常有效!!
neighborAplication = actionOrder
neighborAplication = actionOrder[:]