おそらく、C++ のような言語から Python に移行することになるでしょう。変数は、値が格納されるメモリの場所です。Python では、値は心配する必要のない場所に格納され、変数はそれらを参照する単なる名前です。値。変数が別の変数を参照するようにする方法はありません*。別の変数と同じ値を参照するようにすることはできますが、それは問題ではありません。
たとえば、C++ では次のようになります。
int x[] = {1, 2, 3};
int &y = x[0];
ここで、は 3 つの値x
を格納するのに十分な大きさのメモリ ロケーションであり、これらのロケーションの最初のものへの参照です。したがって、まだ生きている間に消えてしまうと、ぶら下がっている参照ができてしまい、これは悪いことです。しかし、Pythonでは:int
y
x
y
x = [1, 2, 3]
y = x[0]
ここで、x
はオブジェクトの名前であり、その 3 つの位置は別の場所に格納されているlist
3 つの異なるオブジェクトの名前であり、最初のオブジェクトの別の名前です。がなくなると、Python は を解放し、その後およびオブジェクト** を解放して (他の誰もそれらを参照しないため)、オブジェクトだけを残します。int
y
int
x
list
2
3
1
これが、Python に「コピー コンストラクター」*** がない理由でもあります。C++ では、新しいメモリ ロケーションを作成し、 fromをそのメモリ ロケーションにint z = x[0]
暗黙的にコピーします。Python では、明示的に のように記述しない限り、何もコピーすることはありません。int
x[0]
z = copy.copy(x[0])
* これは、閉鎖セルがカバーの下でどのように機能するかを見ると、まったく真実ではありません。
** 実際、小さい整数は通常特別に扱われ、永久に存続しますが、それは無視しましょう。
*** コピー代入演算子、移動コンストラクター、および移動代入演算子ははるかに少なくなります。