.reverse()不能在jython中处理多维数组的一行?

时间:2012-11-23 16:38:26

标签: java jython python

我最近一直在玩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()。我觉得这适用于许多(如果不是全部)列表函数。

2 个答案:

答案 0 :(得分:2)

访问input[0](以及任何其他索引)可能会创建一个包含数据副本的一维数组,而不是您期望的数据视图。

答案 1 :(得分:0)

我的猜测是当你使用Integer [] []输入时,你创建了一个不可变数据的表(可变)。因此,虽然您可以修改列表,但您无法修改该列表中包含的对象。 因此,修改数组(append,pop,reverse)所需的所有方法都不起作用。