2

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

4

2 に答える 2

2

input[0]予想どおり、(他のインデックスと同様に)アクセスすると、データのビューではなく、データのコピーを含む 1 次元配列が作成される可能性があります。

于 2012-11-23T18:35:59.153 に答える
0

私の推測では、Integer[][] 入力を使用すると、不変データのテーブル (変更可能) が作成されます。したがって、リストを変更することはできますが、そのリストに含まれるオブジェクトを変更することはできません。したがって、配列を変更するために必要なすべての方法 (追加、ポップ、リバース) は機能しません。

于 2012-11-23T18:02:06.960 に答える