コンピュータ科学者のように考える方法で次のコードが遭遇しました。誰も私に何が起こっているのか説明できますか? ここで私はそれを理解しようとしています。Pythonで2つの変数を交換しようとすると、奇妙な動作が発生する
(1):スワップ関数(より正確には、(x、y)=(y、x))はxとyの参照を入れ替えることです。
(2):関数swap(a、b)が呼び出されると、参照渡しされます。つまり、aとxは参照を共有し、yとbは参照を共有します。
(3):(1)と(2)に基づいて、xとyの参照を入れ替えるだけで、aとbでは何も変わりません。そのため、このスワップ機能は動作しません。
この理解が正しいかどうかは誰にでも分かりますか?
def swap(x, y): # Incorrect version
print("before swap statement: x:", x, "y:", y)
(x, y) = (y, x)
print("after swap statement: x:", x, "y:", y)
a = ["This", "is", "fun"]
b = [2,3,4]
print("before swap function call: a:", a, "b:", b)
swap(a, b)
print("after swap function call: a:", a, "b:", b)
あなたは 'X'と 'y'、ない' A'と 'B'を交換しています。これは「何かをする」とは考えられていません。それはあなたの質問に答えますか? – deceze
これは可変スコープに関するものです。 'swap'の中の' x、y'はローカル変数なので、グローバル 'a、b'は変わりません。 – dragon2fly
また、 'x、y = y、x'をかっこなしで使うことができます。 – Harvey