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

Python-Programme
Guest
 Warum liefert ctypes.c_long.from_address.value die Referenzanzahl eines Objekts?

Post 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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post