Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの弱参照


Pythonで弱参照を作成するには、弱参照を使用する必要があります モジュール。 weakrefは、オブジェクトを存続させるのに十分ではありません。弱参照の基本的な使用法は、大きなオブジェクトのキャッシュまたはマッピングを実装することです。

このモジュールを使用するには、-

を使用してインポートする必要があります
import weakref

すべてのオブジェクトを弱く参照できるわけではありません。 tupleやintなどの一部の組み込み型は、弱参照をサポートしていません。弱参照に関連するクラスとメソッドがいくつかあります。

クラスweakref.ref(object [、callback])

オブジェクトへの弱参照を返します。指示対象がまだ生きている場合は、参照オブジェクトを呼び出すことで実際のオブジェクトを取得できますが、実際のオブジェクトが存在しない場合は、なしが返されます。 。

メソッドweakref.proxy(object [、callback])

このメソッドは、弱参照を使用しているオブジェクトのプロキシを返すために使用されます。返されるオブジェクトは、ProxyTypeまたはCallableProxyTypeのいずれかです。

メソッドweakref.getweakrefcount(object)

このメソッドは、オブジェクトの弱参照とプロキシの数を返すために使用されます。

メソッドweakref.getweakrefs(object)

このメソッドは、弱参照とプロキシオブジェクトのリストを返すために使用されます。

サンプルコード

import weakref
class my_list(list):
   pass
new_list = my_list('String') #Use my_list class to define a list
print(new_list)
weak_ref = weakref.ref(new_list)
new_weak_list = weak_ref()
new_proxy = weakref.proxy(new_list)
print(new_weak_list)
print('The object using proxy: ' + str(new_proxy))
if new_list is new_weak_list:
   print("There is a weak reference")
print('The Number of Weak references: ' + str(weakref.getweakrefcount(new_list)))
del new_list, new_weak_list #Delete both objects
print("The weak reference is: " + str(weak_ref()))

出力

['S', 't', 'r', 'i', 'n', 'g']
['S', 't', 'r', 'i', 'n', 'g']
The object using proxy: ['S', 't', 'r', 'i', 'n', 'g']
There is a weak reference
The Number of Weak references: 2
The weak reference is: None

  1. Pythonオブジェクトの比較「is」と「==」

    この記事では、オブジェクトの比較について学習します。つまり、演算子と等式演算子の間です。 等式演算子は渡された引数の値を処理しますが、is演算子は引数として渡された2つのオブジェクトの参照を比較します。 等しい場合、引数の演算子の内容はそれらの参照を無視して比較されます。つまり、異なる場所に格納されている同じコンテンツは同一であると見なされますが、演算子の参照を使用する場合は最優先事項です。 次に、以下の実装の概念を観察しましょう- 例 list_1 = ['t','u','t','o','r'] list_

  2. PythonのTimeTupleとは何ですか?

    datetime.dateインスタンスのtimetuple()メソッドは、time.struct_time型のオブジェクトを返します。 struct_timeは名前付きタプルオブジェクトです(名前付きタプルオブジェクトには、インデックスまたは名前でアクセスできる属性があります)。 struct_timeオブジェクトには、日付フィールドと時刻フィールドの両方を表す属性と、夏時間がアクティブかどうかを示すフラグがあります。 timetuple()関数によって返される名前付きタプルでは、​​日付オブジェクトに従って年、月、日のフィールドが設定され、時間、分、秒に対応するフィールドはゼロに設定され