Pythonの「ポインタ」

Python には、渡された変数の一意の識別子を返す id() 関数があり、Cython の id() 関数は、オブジェクトのメモリ アドレスを取得するために使用されます。

次のテストでは Cython 3.9 を使用します。

等しいデータが割り当てられた 2 つの変数は同じデータを指しますか?

Number、String、および Tuple データ型の場合、同じ値を持つ変数は同じメモリの値を使用します。

>>> a=1;b=1
>>> print(id(a),id(b),a==b,a is b)
1847894108464 1847894108464 True True

>>> c=123456789;d=123456789    # 大数值也一样
>>> print(id(c),id(d),c==d,c is d)
2197632879728 2197632879728 True True
>>> s1='string test';s2='string test'
>>> print(id(s1),id(s2),s1==s2,s1 is s2)
2197633193712 2197633193712 True True
>>> t1=(1,2);t2=(1,2)
>>> print(id(t1),id(t2),t1==t2,t1 is t2)
2870622322432 2870622322432 True True
>>> t3=(1,2,3,4,5,6,7,8,9);t4=(1,2,3,4,5,6,7,8,9)
>>> print(id(t3),id(t4),t3==t4,t3 is t4)
2870621946144 2870621946144 True True

リストとディレクトリの場合、それらは異なるメモリ データです。

>>> L3=[1,2];L4=[1,2]
>>> print(id(L3),id(L4),L3==L4,L3 is L4)
2197633192256 2197632739392 True False
>>> d1={'aa':123456, 'bb':789};d2={'aa':123456, 'bb':789}
>>> print(id(d1),id(d2),d1==d2,d1 is d2)
2870621858304 2870621858432 True False

演算中に変数が指す変化

a=a+b と a+=b は両方とも新しいメモリを作成します

>>> a=1;b=2
>>> a_ = id(a)
>>> a=a+b
>>> print(a_ == id(a))
False
>>> a=1;b=2;a_=id(a)
>>> a+=b;
>>> print(a_ == id(a))
False

以下の場合、新しいメモリは作成されません。

>>> L=[1,2,3,4,5,6];L_=id(L)
>>> L[:]=(0,)
>>> print(L)
[0]
>>> print(id(L) == L_)

おすすめ

転載: blog.csdn.net/qq_35858902/article/details/129232367