最初のコード:
結果:
2 番目のコード:
私の質問: num = num は、mun = num num と直接的に等価ではないでしょうか? 計算結果が異なるのはなぜですか?何が起こっているのか###
次のようなことを試してみてください。 リーリー
を使用する変数のアドレスが変更されていることがわかりました。これは、num+=numとnum=num+num+が等価ではないということです。 ただし、以下のセクシーな操作を行うと、顔を平手打ちされることになります リーリー
+
その理由は、Python のデータ構造が可変と不変に分かれているためです。 変数型の場合、上記のリストに示すように、= と += は明らかに異なります: + は接続操作を表し、+= は追加を表します 不変型の場合、= と += は同じ操作です (上記のタプルなど) 変数型と不変型の本質はメモリ空間が可変かどうかにあります~
最初に気づくのは違いです
呼び出されるメソッドが異なり、__add__、__iadd__ であることがわかります加算演算子は、num に割り当てる新しいオブジェクトを計算します増分代入演算子は、元の参照を変更します
ここを参照: https://stackoverflow.com/que...
Python では引数は代入によって渡されることに注意してください。
リーリー
Pythonでは、a=a+bは、まず新しいオブジェクトを作成し、変数aにこのオブジェクトを参照させることです。 a+=bは、aが参照するオブジェクトの
値をa+bの値に変更します。
次のようなことを試してみてください。 リーリー
変数に割り当てられたメモリアドレスは、id()関数を通じて取得できます。実験の結果、を使用する変数のアドレスが変更されていることがわかりました。これは、num+=numとnum=num+num
割り当てられたアドレスは常に変更されているようです。+
が等価ではないということです。 ただし、以下のセクシーな操作を行うと、顔を平手打ちされることになりますリーリー
その理由は、Python のデータ構造が可変と不変に分かれているためです。
変数型の場合、上記のリストに示すように、= と += は明らかに異なります:
+ は接続操作を表し、+= は追加を表します
不変型の場合、= と += は同じ操作です (上記のタプルなど)
変数型と不変型の本質はメモリ空間が可変かどうかにあります~
最初に気づくのは違いです
リーリー呼び出されるメソッドが異なり、__add__、__iadd__ であることがわかります
加算演算子は、num に割り当てる新しいオブジェクトを計算します
増分代入演算子は、元の参照を変更します
ここを参照: https://stackoverflow.com/que...
Python では引数は代入によって渡されることに注意してください。
Python では、代入は参照ではなくパラメーターを渡すために使用されるため、関数に a を渡すときは、a 自体ではなく、a の値を渡します。それ自体を変更したい場合は、return を使用して値を返す必要がありますリーリー
結果:リーリー
Pythonでは、a=a+bは、まず新しいオブジェクトを作成し、変数aにこのオブジェクトを参照させることです。 a+=bは、aが参照するオブジェクトの
値をa+bの値に変更します。