Pythonベース(4)-変数

6051 ワード

Python
命名規則:
変数名はアルファベットまたは_でなければなりません.はじめに.
変数名の他の部分はアルファベット、あるいは数字です.
Pythonは大文字と小文字に敏感です.
 
下線で始まる識別子には特別な意味があります.
下線で始まる(_foo)の代表は、「from xxx import*」でインポートできません.
二重下線で始まる(_foo)はクラスのプライベートメンバーを表します.
二重下線で始まる(_foo_)pythonの特殊なメソッド専用のIDを表します.init__()クラスを表すコンストラクタで、解釈器で使用します.
 
変数の宣言と割り当て:
Pythonでは変数を宣言する必要はありません.変数は、最初の付与によって生成され、作用範囲を超えると自動的に消滅します.
X = 1 
この付与はPythonでどのように行われますか?
付与プロセス:
1.メモリにオブジェクト1を作成します.
2、変数名Xを作成する.
3、変数とオブジェクトをマッピング関係にする.
値を割り当てる場合は、値ではなく変数にオブジェクトの参照を割り当てます.
変数は、任意のタイプのオブジェクトを参照できます.変数にはタイプがなく、オブジェクトにのみタイプがあります.
変数は使用前に割り当てられなければなりません.
 
Pythonでは一度に多値を付与できます.
>>> (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday) = range(7)
>>> Monday
0
>>> Thursday
3
>>> Sunday
6

Pythonは2つの変数の値を簡単に交換できます.
>>> a = 1
>>> b = 2
>>> a,b = b,a
>>> a
2
>>> b
1
>>>

Pythonでは、複数の値を割り当てることができます.
>>> x=y=z=1
>>> x
1
>>> y
1
>>> z
1
>>>

インクリメンタルわりあて
x=x+1はx+=1と書くことができます
可変オブジェクトの場合、A=A+BはA+=Bと同じ結果になります(新しいオブジェクトを割り当てます).
可変オブジェクトの場合、可変オブジェクトはその場で変更されます.
>>> x=1
>>> y=x
>>> x+=2
>>> x
3
>>> y
1
>>>
>>> l = [123,'xyz']
>>> ll = l
>>> l += [456]
>>> l
[123, 'xyz', 456]
>>> ll
[123, 'xyz', 456]
>>>

 
参照の理解:
 
Pythonは1枚のデータをオブジェクトに格納し、変数はオブジェクトの唯一の参照である.コンピュータメモリ内の特殊な場所の名前です.すべてのオブジェクトに一意のID番号、タイプ、値があります.オブジェクトのタイプは変わりません.可変タイプの場合、その値は可変です.id(obj)関数は、オブジェクトのアイデンティティ、すなわちメモリ内のオブジェクトのアドレスを取得するために使用することができる.
 
各オブジェクトには、現在参照されている変数の数を記録する参照カウンタが含まれます.オブジェクトに変数を指定したり、オブジェクトをリストや他の包容器のメンバーにしたりすると、参照数が増加します.オブジェクトを包容器から元に戻したり、再割り当てしたり、削除したりすると、参照数が減少します.参照カウントが0値に達すると(つまり、このオブジェクトを参照する変数はありません)、pythonの回収メカニズムは、使用するメモリを自動的に回収します.delは変数を削除するために使用できますが、オブジェクトは削除できません.
sys.gettrefcount(obj)関数は、所与のオブジェクトの参照カウントを返します.
 
 
浅いコピーと深いコピー:
リストに変数を割り当てることで、リストへの参照を作成できます.リストのコピーを作成する場合は、浅いコピーと深いコピーの概念を理解します.
1リストまたは他の包容器オブジェクトの浅いコピー(Shallow)は、オブジェクト自体のコピーを生成できますが、リストに含まれるオブジェクトへの参照も作成されます.スライス(object[:])とcopyモジュールのcopy(obj)関数で作成できます.
2リストまたは他のオブジェクト包容器オブジェクトの深いコピーは、オブジェクト自体のコピーを生成し、すべてのサブオブジェクトのコピーを再帰的に生成することができる.copyモジュールのdeepcopy(obj)関数で作成できます.
2つのコピーを比較すると、一般的には同じように表現されますが、リストに別のリストが含まれている場合、親リストの浅いコピーには独立したコピーではなく、サブリストへの参照が含まれます.その結果、内部リストを変更すると、親リストの2つのコピーから次のように表示されます.
>>> a = [1,2,3,[4,5]]
>>> b=a
>>> id(a)
31246216
>>> id(b)
31246216
>>> id(a[3])
31206496
>>> id(b[3])
31206496
>>> c = a[:]
>>> id(c)
31244456
>>> id(c[3])
31206496
>>> a[3].remove(4)
>>> a
[1, 2, 3, [5]]
>>> b
[1, 2, 3, [5]]
>>> c
[1, 2, 3, [5]]
>>>
>>> a = [1,2,3,[4,5]]
>>> import copy
>>> b = copy.deepcopy(a)
>>> b
[1, 2, 3, [4, 5]]
>>> id(a)
31085992
>>> id(b)
31248792
>>> id(a[3])
31244536
>>> id(b[3])
31249592
>>> a[3].remove(4)
>>> a
[1, 2, 3, [5]]
>>> b
[1, 2, 3, [4, 5]]
>>>