ホームページ  >  に質問  >  本文

Python 初心者が a+=a と a=a+a の違いについて質問しました

最初のコード:

リーリー

結果:

2 番目のコード:

リーリー

結果:

私の質問:
num = num は、mun = num num と直接的に等価ではないでしょうか?
計算結果が異なるのはなぜですか?何が起こっているのか###

三叔三叔2685日前1126

全員に返信(4)返信します

  • 大家讲道理

    大家讲道理2017-06-13 09:26:36

    次のようなことを試してみてください。 リーリー

    変数に割り当てられたメモリアドレスは、id()関数を通じて取得できます。実験の結果、

    を使用する変数のアドレスが変更されていることがわかりました。これは、num+=numとnum=num+num+が等価ではないということです。 ただし、以下のセクシーな操作を行うと、顔を平手打ちされることになります
    リーリー

    割り当てられたアドレスは常に変更されているようです。

    その理由は、Python のデータ構造が可変と不変に分かれているためです。
    変数型の場合、上記のリストに示すように、= と += は明らかに異なります:
    + は接続操作を表し、+= は追加を表します
    不変型の場合、= と += は同じ操作です (上記のタプルなど)
    変数型と不変型の本質はメモリ空間が可変かどうかにあります~

    返事
    0
  • PHP中文网

    PHP中文网2017-06-13 09:26:36

    最初に気づくのは違いです

    リーリー

    呼び出されるメソッドが異なり、__add__、__iadd__ であることがわかります
    加算演算子は、num に割り当てる新しいオブジェクトを計算します
    増分代入演算子は、元の参照を変更します

    ここを参照: https://stackoverflow.com/que...

    返事
    0
  • 滿天的星座

    滿天的星座2017-06-13 09:26:36

    Python では引数は代入によって渡されることに注意してください。

    Python では、代入は参照ではなくパラメーターを渡すために使用されるため、関数に a を渡すときは、a 自体ではなく、a の値を渡します。それ自体を変更したい場合は、return を使用して値を返す必要があります

    リーリー

    結果:

    リーリー

    返事
    0
  • 世界只因有你

    世界只因有你2017-06-13 09:26:36

    Pythonでは、a=a+bは、まず新しいオブジェクトを作成し、変数aにこのオブジェクトを参照させることです。 a+=bは、aが参照するオブジェクトの

    をa+bの値に変更します。

    返事
    0
  • キャンセル返事