Pythonを学習しようとしたときに、この問題に遭遇しました。次の関数を検討してください。
def swap0(s1, s2):
assert type(s1) == list and type(s2) == list
tmp = s1[:]
s1 = s2[:]
s2 = tmp
return
s1 = [1]
s2 = [2]
swap0(s1, s2)
print s1, s2
s1 と s2 は何を出力しますか?
問題を実行した後、print ステートメントが 1 2 を出力することがわかりました。s1 と s2 の値はswap0
関数から変更されていないようです。私が考えることができた唯一の説明は、線のためでした.
tmp = s1[:]
s1[:] はコピーであるため、関数呼び出しで s1 の値が変更されないことは理にかなっています。ただし、のパラメーターswap0
は (s1, s2) であるため、tmp = s1[:] を実行した後かどうかはわかりません。いつでも
s1 = something...
s1 自体ではなく、s1 のコピーへの参照になります。誰かがより良い説明を提供できますか? ありがとう。