Apakah ada cara untuk mendapatkan hitungan ref saat ini dari suatu objek dengan Python?
python
refcounting
GEOCHET
sumber
sumber
Menggunakan
gc
modul, antarmuka ke nyali pengumpul sampah, Anda dapat memanggilgc.get_referrers(foo)
untuk mendapatkan daftar semua yang merujukfoo
.Karenanya,
len(gc.get_referrers(foo))
akan memberi Anda panjang daftar itu: jumlah pengarah, yang Anda cari.Lihat juga
gc
dokumentasi modul .sumber
sys.getrefcount(object)
) lebih mudah daripadalen(gc.get_referrers(foo))
, jika Anda benar-benar hanya membutuhkan nomornya.Ada
gc.get_referrers()
dansys.getrefcount()
. Tapi, agak sulit untuk melihat bagaimanasys.getrefcount(X)
bisa melayani tujuan penghitungan referensi tradisional. Mempertimbangkan:import sys def function(X): sub_function(X) def sub_function(X): sub_sub_function(X) def sub_sub_function(X): print sys.getrefcount(X)
Kemudian
function(SomeObject)
berikan '7',sub_function(SomeObject)
berikan '5',sub_sub_function(SomeObject)
berikan '3', dansys.getrefcount(SomeObject)
berikan '2'.Dengan kata lain: Jika Anda menggunakan
sys.getrefcount()
Anda harus menyadari kedalaman panggilan fungsi. Untukgc.get_referrers()
satu mungkin harus memfilter daftar perujuk.Saya akan mengusulkan untuk melakukan penghitungan referensi manual untuk tujuan seperti "isolasi pada perubahan", yaitu "klon jika direferensikan di tempat lain".
sumber
import ctypes my_var = 'hello python' my_var_address = id(my_var) ctypes.c_long.from_address(my_var_address).value
ctypes menggunakan alamat variabel sebagai argumen. Keuntungan menggunakan ctypes dibandingkan sys.getRefCount adalah Anda tidak perlu mengurangi 1 dari hasil.
sumber