Page 1 of 1

Warum liefert ctypes.c_long.from_address.value die Referenzanzahl eines Objekts?

Posted: 05 Jan 2025, 10:25
by Guest
In dieser Pycon-Konferenz sagt der Moderator, dass ctypes.c_long.from_address(id(SOME_OBJECT)).value den Referenzzähler eines Objekts liefern würde.
Ich habe versucht, dies in der Dokumentation zu finden, aber habe nichts gefunden, was mir hilft. Das Dokument sagt:

from_address(address)
Diese Methode gibt einen ctypes-Typ zurück Instanz unter Verwendung des Speichers, der durch die Adresse angegeben wird, die eine Ganzzahl sein muss.
Diese Methode und andere, die diese Methode indirekt aufrufen, lösen ein Überwachungsereignis ctypes.cdata mit dem Argument Adresse aus.

Es wurde nicht erwähnt Referenzanzahl (zumindest kann ich es nicht herausfinden). Ich habe es versucht und das scheint richtig zu sein:

Code: Select all

Python 3.13.1 (main, Dec  3 2024, 17:59:52) [Clang 16.0.0 (clang-1600.0.26.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes, sys
>>> name = "some random name 123"
>>> sys.getrefcount(name)
2
>>> ctypes.c_long.from_address(id(name)).value
1
>>> x, y = name, name
>>> sys.getrefcount(name)
4
>>> ctypes.c_long.from_address(id(name)).value
3
Kann jemand das erklären?