1. ホーム
  2. python

[解決済み] Pythonで、ある変数の値を別の変数に代入するとどうなるか?

2023-07-25 01:03:14

質問

Pythonを学び始めて2日目ですが(C++の基礎といくつかのOOPは知っています)、Pythonの変数について少し混乱しています。

以下は、私が現在それらを理解する方法です。

Pythonの変数は、オブジェクト(mutableかimmutableのどちらか)への参照(またはポインタ?) のようなものがあるとき num = 5 のような場合、不変のオブジェクトである 5 がメモリのどこかに作られ、名前とオブジェクトの参照ペアの num はある名前空間に作られます。私たちが a = num の場合、何もコピーされませんが、今は両方の変数が同じオブジェクトを参照しており a は同じ名前空間に追加されます。

ここで、私の本の Pythonで退屈なことを自動化する は私を混乱させます。初心者の本なので、オブジェクトや名前空間などには触れておらず、次のようなコードを説明しようとしているのです。

>>> spam = 42
>>> cheese = spam
>>> spam = 100
>>> spam
100
>>> cheese
42

この本の説明は、C++の本と全く同じで、オブジェクトへの参照/ポインタを扱っている私としては不満が残ります。ということで、今回は3行目で、整数がimmutableであるため、推測しています。 spam はメモリ上の別の場所への全く新しいポインタ/参照が割り当てられている、つまり、最初に指していたメモリは変更されていないのです。したがって、次のようになります。 cheese が参照する最初のオブジェクトを参照しています。 spam . これは正しい説明でしょうか?

どのように解決するのですか?

C++の開発者であれば、Pythonの変数をポインタと考えることができます。

したがって、あなたが spam = 100 と書くと、それまでオブジェクト 42 を指していたポインターを、オブジェクト 100 .

さっきの。 cheese と同じオブジェクトを指すように割り当てられていた spam が指しているのと同じオブジェクトを指すように割り当てられました。 42 であった。を変更していないため cheese を変更していないので、まだ 42 .

ポインタの代入は、指されたオブジェクトについて何も変更しないので、この場合、不変性は関係ありません。