Pythonスモールデータプール、コードブロック
6191 ワード
一、id,is,==
idはメモリアドレスであり、データ(オブジェクト)を作成するだけでメモリに空間を開き、このデータをメモリに一時的に加算します.この空間は一意の識別です.身分証明書番号のように、この空間を識別するメモリアドレス、つまりこのデータ(オブジェクト)のidです.このデータのメモリアドレスはid()で取得できます.
==は、比較された両側の数値が等しいかどうか、isは比較された両側のメモリアドレスが等しいかどうかです.メモリアドレスが等しい場合、両方のデータは同じメモリアドレスを指します.このときメモリアドレスの内容が変わると、両方のデータが変化します.メモリアドレスが同じであれば、値は必ず同じですが、値が同じであれば、メモリアドレスは必ずしも同じではありません.
二、コードブロック
Pythonプログラムはコードブロックで構成されています.ブロックはpythonプログラムのテキストで、彼はユニットとして実行されます.コードブロック:モジュール、関数、クラス、ファイルなどがコードブロックです.インタラクティブに入力される各コマンドは、コードブロックです.インタラクション方式はcmdでPython解釈器に入り、各行のコードはコードブロックです.一方、1つのファイルの2つの関数についても、それぞれ2つの異なるコードブロックです.
コードブロックのキャッシュメカニズム
前提条件:同じコードブロック内.メカニズムの内容:Pythonは、同じコードブロックの初期化オブジェクトのコマンドを実行すると、その値がすでに存在するかどうかをチェックし、存在する場合は再利用します.すなわち、同じコードブロックを実行すると、初期化オブジェクトのコマンドに遭遇すると、初期化されたこの変数と値が辞書に格納され、新しい変数に遭遇すると、まず辞書でレコードが照会され、同じレコードがあれば、この辞書の前の値が繰り返し使用されます.したがって、あなたが示した例では、ファイルが実行されると(同じコードブロック)i 1、i 2の2つの変数が同じオブジェクトに指向され、キャッシュメカニズムを満たすと、メモリには1つしか存在しません.すなわち、idは同じです.適用対象:int(float)、str、bool.int(float):任意の数字は同じコードブロックの下で多重化されます.bool:TrueとFalseは辞書に1,0で存在し,多重化される.str:ほとんどの文字列がキャッシュメカニズムに合致します
三、小型データプール
小データプール、異なるコードブロックのキャッシュメカニズム、小整数キャッシュメカニズムとも呼ばれ、または駐在メカニズムと呼ばれます.
前提条件:異なるコードブロック内.メカニズムの内容:Pythonは自動的に-5~256の整数をキャッシュし、これらの整数を変数に割り当てると、オブジェクトを再作成するのではなく、作成したキャッシュオブジェクトを使用します.pythonは、一定のルールの文字列を文字列常駐プールに作成します.これらの文字列を変数に割り当てると、オブジェクトを再作成するのではなく、文字列常駐プールで作成したオブジェクトを使用します.実は、キャッシュでも文字列がプールに存在してもpythonが行った最適化は、5~256の整数と一定の規則の文字列を「プール」(コンテナ、辞書)に置き、プログラムの変数がこれらの範囲内の整数や文字列を指していても、彼は直接この「プール」で引用し、言外の意味を表しています.メモリの作成です.適用対象:int(float)、str、bool
idはメモリアドレスであり、データ(オブジェクト)を作成するだけでメモリに空間を開き、このデータをメモリに一時的に加算します.この空間は一意の識別です.身分証明書番号のように、この空間を識別するメモリアドレス、つまりこのデータ(オブジェクト)のidです.このデータのメモリアドレスはid()で取得できます.
name = ' '
print(id(name)) # 1632311693224
==は、比較された両側の数値が等しいかどうか、isは比較された両側のメモリアドレスが等しいかどうかです.メモリアドレスが等しい場合、両方のデータは同じメモリアドレスを指します.このときメモリアドレスの内容が変わると、両方のデータが変化します.メモリアドレスが同じであれば、値は必ず同じですが、値が同じであれば、メモリアドレスは必ずしも同じではありません.
id1 = 110
id2 = 110
print(id(id1)) # 1599502768
print(id(id2)) # 1599502768
print(id1 == id2) # True PyCharm, , ,\
# id2 110, id1,id2 , id
print(id1 is id2) # True
二、コードブロック
Pythonプログラムはコードブロックで構成されています.ブロックはpythonプログラムのテキストで、彼はユニットとして実行されます.コードブロック:モジュール、関数、クラス、ファイルなどがコードブロックです.インタラクティブに入力される各コマンドは、コードブロックです.インタラクション方式はcmdでPython解釈器に入り、各行のコードはコードブロックです.一方、1つのファイルの2つの関数についても、それぞれ2つの異なるコードブロックです.
コードブロックのキャッシュメカニズム
前提条件:同じコードブロック内.メカニズムの内容:Pythonは、同じコードブロックの初期化オブジェクトのコマンドを実行すると、その値がすでに存在するかどうかをチェックし、存在する場合は再利用します.すなわち、同じコードブロックを実行すると、初期化オブジェクトのコマンドに遭遇すると、初期化されたこの変数と値が辞書に格納され、新しい変数に遭遇すると、まず辞書でレコードが照会され、同じレコードがあれば、この辞書の前の値が繰り返し使用されます.したがって、あなたが示した例では、ファイルが実行されると(同じコードブロック)i 1、i 2の2つの変数が同じオブジェクトに指向され、キャッシュメカニズムを満たすと、メモリには1つしか存在しません.すなわち、idは同じです.適用対象:int(float)、str、bool.int(float):任意の数字は同じコードブロックの下で多重化されます.bool:TrueとFalseは辞書に1,0で存在し,多重化される.str:ほとんどの文字列がキャッシュメカニズムに合致します
三、小型データプール
小データプール、異なるコードブロックのキャッシュメカニズム、小整数キャッシュメカニズムとも呼ばれ、または駐在メカニズムと呼ばれます.
前提条件:異なるコードブロック内.メカニズムの内容:Pythonは自動的に-5~256の整数をキャッシュし、これらの整数を変数に割り当てると、オブジェクトを再作成するのではなく、作成したキャッシュオブジェクトを使用します.pythonは、一定のルールの文字列を文字列常駐プールに作成します.これらの文字列を変数に割り当てると、オブジェクトを再作成するのではなく、文字列常駐プールで作成したオブジェクトを使用します.実は、キャッシュでも文字列がプールに存在してもpythonが行った最適化は、5~256の整数と一定の規則の文字列を「プール」(コンテナ、辞書)に置き、プログラムの変数がこれらの範囲内の整数や文字列を指していても、彼は直接この「プール」で引用し、言外の意味を表しています.メモリの作成です.適用対象:int(float)、str、bool
# cmd
>>> id1 = 200
>>> id2 = 200
>>> print(id(id1))
1599505648
>>> print(id(id2))
1599505648
>>> print(id1 is id2) # 200 256, id
True
# 256
>>> a = 500
>>> b = 500
>>> print(id(a))
2624868951152
>>> print(id(b))
2624868953840
>>> print(a is b) #False
False