我最近一直在玩Jython,我注意到一些奇怪的事情。我确定我在这里遗漏了一些明显的东西,但有人可以向我解释为什么.reverse()不能在多维数组的单行上工作吗?
使用PythonInterpreter.set()
从Java传入输入当我执行以下python代码时......
#Integer[][] input
print(input[0])
input[0].reverse()
print(input[0])
我得到以下输出,值没有被反转。
array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [0, 1, 1, 1, 1])
虽然我在单维数组上执行reverse()......
#Integer[] input;
print(input)
input.reverse()
print(input)
结果如我所料。
array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [1, 1, 1, 1, 0])
同样,如果我将input [0]复制到它自己的变量,然后反转,它也会按预期工作。
#Integer[][] input
print(input[0])
tmp = input[0]
tmp.reverse()
input[0] = tmp
print(input[0])
我也得到了我期望的结果。
array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [1, 1, 1, 1, 0])
我也从......获得了预期的结果。
#Integer[][] input
print(input[0])
input[0] = input[::-1]
print(input[0])
--- --- EDIT
在这种情况下,.insert()似乎也无法行动......
#Integer[][] input
print(input[0])
input[0].insert(0,123)
print(input[0])
...可生产
array(java.lang.Integer, [0, 1, 1, 1, 1])
array(java.lang.Integer, [0, 1, 1, 1, 1])
同样适用于.append()和.pop()。我觉得这适用于许多(如果不是全部)列表函数。
答案 0 :(得分:2)
访问input[0]
(以及任何其他索引)可能会创建一个包含数据副本的一维数组,而不是您期望的数据视图。
答案 1 :(得分:0)
我的猜测是当你使用Integer [] []输入时,你创建了一个不可变数据的表(可变)。因此,虽然您可以修改列表,但您无法修改该列表中包含的对象。 因此,修改数组(append,pop,reverse)所需的所有方法都不起作用。