JAVAreverse()不处理jython中多维数组的一行?
我最近和Jython在一起玩,我注意到了一些奇怪的事情。我肯定我遗漏了一些明显的东西,但有人能解释一下原因吗。reverse()对多维数组的一行不起作用
正在使用PythonInterpreter从Java传入输入。set()
当我执行以下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])
同样,如果我将输入[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])
---编辑---
看起来也是这样。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()。我觉得这适用于很多(如果不是全部的话)列表函数
# 1 楼答案
我的猜测是,当您使用Integer[]输入时,您创建了一个不可变数据表(可变)。因此,虽然可以修改列表,但不能修改该列表中包含的对象。 因此,所有需要修改数组(append、pop、reverse)的方法都无法工作
# 2 楼答案
访问
input[0]
(以及任何其他索引)可能会创建一个带有数据副本的一维数组,而不是您所期望的数据视图