Pythonオブジェクト
Pythonは、すべてが対象です。組成物の識別子(アイデンティティ)、タイプ(型)、値(値):各オブジェクトは、から成ります。
一意的に使用される識別子オブジェクトを識別し、一般的にコンピュータメモリアドレス内のオブジェクトに適用されます。オブジェクトobjを特定組み込み関数ID(OBJ)リターンを使用。
Pythonの転送
転送Pythonは参照によって渡されます。変数は、オブジェクトへの参照であり、変数は、オブジェクトのメモリアドレスを保持しました。
Pythonは動的言語です。変数は、オブジェクト参照される変数に応じて、Pythonのインタープリターは自動的にデータタイプを決定し、宣言型(タイプ)を表示する必要はありません。
Pythonは、各オブジェクトは、データ型を持つ、強く型付けされた言語であり、唯一のサポート業務のこのタイプをサポートしています。
スタックに格納された変数、スタックは、 OBJのメモリアドレスに格納されています。objがに保存されている山で。値、タイプ、ID(メモリアドレス):これは、ヒープOBJを保ちます。
不変オブジェクト
不変オブジェクトでは、オブジェクトは、変数やオブジェクトを指し示す新しい変数がオブジェクト上の任意の効果を持っていないとき、互いに独立です。
= " 123 " B = A= " XYZ " プリント() プリント(B)
印刷結果は「XYZ」、「123」です。図中の上記メモリ制御。Pythonの変数がラベルである理由を説明します。B =、= XYZ、それは「XYZ」オブジェクトに掲載同じように変数タグは(基本的に新しいメモリアドレスaに割り当てられた)とき。オリジナルの「123」は点123、新しいオブジェクト点XYZに二つのタブとB、Bを有しています。これらのオブジェクトは不変(文字列、タプル、および数字)であるという前提に基づいていなければなりません。
変数オブジェクト
可変オブジェクト(リスト、辞書、集合)に、直接、現在のオブジェクトを操作することができる場合。そして、新しい変数のコピーのコピーではありません。
= [1、2、3 ] B = A A [0]、A [ 1]、A [2] = 4 ,. 5 ,. 6 // リストのオリジナルの要素を変更 >>> A [ 4、5、6 ] >>> B [ 4、5、6]
浅い対深いコピー
シャローコピー
不変のタイプについては、浅いコピーのコピーの専用メモリアドレスは、新しいメモリ空間を開けないでください。
変数の型については、浅いコピーは、新たなメモリ空間を開きます(唯一のトップレベルは、エレメントアドレスの内層はまだ同じである、新しいスペースをオープンしました)。サブエレメントアドレスは同じ(共有されている古いものと新しい標的配列)です。
浅いコピーした後に、要素タイプのオリジナルオブジェクト変数の値を変更する、それはまた、オブジェクトのコピーに影響を与える、元の値を不変オブジェクトタイプエレメント、影響を受けた唯一のオリジナルタイプを変更します。
ディープコピー
浅拷贝,除了顶层拷贝,还对子元素也进行了拷贝(本质上递归浅拷贝)。
经过深拷贝后,原始对象和拷贝对象所有的元素地址都没有相同的了(对于不可变对象指向相同的地址空间,可变对象序列内存地址就不同了)。
インポートコピー A = [1、2 ,. 3 ,. 4、[ ' A '、' B ' ] #元のオブジェクト B = #の参照割り当て、転送オブジェクト C = copy.copy(A) #のオブジェクトのコピー、浅いコピー D = copy.deepcopy() #のオブジェクトのコピー、ディープコピー a.append( 5) #は、オブジェクト変更 Aを[ 4] .append(' C ')#変更[ '、 'B'内のオブジェクト ]リストオブジェクト 印刷(' = ' ) プリント(' B = ' 、B) プリント(' C = ' 、C) プリント(' D = ' 、D) プリント(ID()) プリント(ID(C)) プリント(ID(D))
結果: