最近、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])
ただし、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])
- -編集 - -
また、これらの状況では .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() についても同様です。これは、すべてではないにしても、多くのリスト関数に当てはまると感じています。