「Pythonの」オブジェクト参照とガベージコレクション

  • 別名:オブジェクトは複数の変数を参照されると、余分な変数オブジェクトはエイリアスと呼ばれます。
  • 各変数は、識別、タイプ、および値を有します。
  • オブジェクトがロゴを持つように作成されると、ロゴは、オブジェクトの存続期間内に変更はありません。
  • 組み込みid()関数オブジェクト識別子を返し、is識別子オペレータは、2つのオブジェクトを比較します。

オブジェクトは、複数の変数によって参照することができ、オブジェクトの識別のための記憶された識別変数、オブジェクトデータ変数に値を有します。

他のPython実装のそれらのCPythonの内のオブジェクトを識別するためのメモリアドレス内の他の値であってもよいです。

  • ==そして、isisよりオペレータ==速く、それは特別な方法を見つけて呼び出しすることなく、Pythonのをリロードすることはできませんので。==特定のは、特殊な視覚的なデータ比較方法が決定され得ます。

  • 不変性の不変配列は相対的である、すなわち、各要素を識別する、可変であるが、変化しない要素。


まず、オブジェクト参照

1.コピー深いと浅いコピー

当該要素を参照して、容器の相対的深さをコピーします素子として再作成されたオブジェクトへとコピーのディープコピー、単純に言えば、その中の要素従って、共有参照二コンテナ要素を引き起こし、参照を含むソース要素の直接のコピーのコピーの浅いコピーを来ります。変更可能なオブジェクトにもたらした唯一の問題参照の共有がもたらす光トラップ条件をコピーすることを発生します。オブジェクト変数は、オブジェクトの要素が含まれています。

a = (1,2,3,[4,5,6])
b = a[:]

for i in range(7,10):
	a[3].append(i)

b
>> (1,2,3,[4,5,6,7,8,9])

 また、浅いコピーのオブジェクトへの変更は、必ずしも他のオブジェクトに反映されないことに注意し、唯一の物体可変要素の場所は、別のオブジェクトに反映されるように変更します

a = [1,2,3,[]]
b = list(a)

a[3].append(4)
b
>> [1,2,3,[4]]

a.append(5)
b
>> [1,2,3,[4]]

a[3] = [44,55,66]
b
>> [1,2,3,[4]]

Pythonはデフォルトの浅いコピーの複製(スライス、コンストラクタ)です。

メモは、オブジェクトの複製を作成するために、複製および変数代入の違いを区別します。

ディープと浅いコピーコピー

copyモジュールを提供deepcopyしてcopy深いコピーし、任意のオブジェクトの簡易コピーを提供する関数。そして、deepcopy()この関数は、優雅に循環参照に対処することが可能で、複製されたオブジェクトを覚えているでしょう。

参照パラメータとして2機能

 ときに変更可能なオブジェクトのパラメータ機能は、次のような問題を引き起こすことがあります。

Ⅰ。REFERENCE伝達関数のパラメータ

 モードのみを通過させるパラメータサポートPythonはすなわち、関数パラメータ引数がエイリアスされ、共用伝送パラメータです。この方法による問題は、内部関数は、元のオブジェクトの機能外部変化をもたらす、可変オブジェクトの代わりに渡されたパラメータを変更することができます。

Ⅱ。パラメータのデフォルト機能として、変数の型を使用しないでください

 あなたは、パラメータのデフォルト値として変数オブジェクトを使用しないでください。関数計算(典型的にはローディングモジュール)、オブジェクトのプロパティの関数としてデフォルト値を定義する場合の問題は、パラメータのデフォルト値に起因します。修正値の可変オブジェクトのデフォルト値、およびin vivoでの機能は、原因となる場合は、この時点では、後続の関数呼び出しは影響します。つまり、関数の複数の呼び出しは、同じ変数オブジェクトのデフォルトパラメータを使用します。

第二に、ガベージコレクション

 Pythonは使用することができますdel名前(変数)を削除削除する文を、しかし、delオブジェクトを直接削除することはできません。場合にのみ、delオブジェクトへの最後の参照を削除し、それがガベージコレクションが発生します。

Pythonは、特別な方法があり__del__、それは、オブジェクトのインスタンスが自動的にインタプリタによって呼び出される時に、最後のチャンスは、外部リソースの例を解放するために呼び出されます、。私はめったに達成するために必要はありません、コードを書かれています__del__


 CPythonとでは、メインのガベージコレクションのアルゴリズムは、参照カウントです。参照カウントをゼロにするとき、オブジェクトが直ちに破棄されます。そこガベージコレクションCPythonの世代別ガベージコレクションアルゴリズムながら、オブジェクトのグループ間で互いにへのすべての参照場合、ので、オブジェクトが配列に得られないことが、今回は、ガベージコレクタを引き起こす可能性があります。

1.弱参照

 弱参照は、すなわち、それがガベージコレクションオブジェクトを妨害しない、参照オブジェクトの数を増加させません。一般的にキャッシュに使用される弱参照は、我々は、オブジェクト参照を保存する必要がありますが、原因参照が常に存在しているキャッシュされたくありません。

发布了51 篇原创文章 · 获赞 1 · 访问量 1313

おすすめ

転載: blog.csdn.net/weixin_44471152/article/details/104317037