0Pricing
Python Academy · Ders

CPython Başvuru Sayımı

CPython'ın nesne ömürlerini başvuru sayaçlarıyla nasıl izlediğini öğrenin.

CPython Başvuru Sayımı, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

Referans Sayımı Nedir?

CPython her nesnenin referans sayısını izler. Sayı 0'a düştüğünde nesnenin belleği hemen serbest bırakılır. Bu, Python'ın birincil bellek yönetimi mekanizmasıdır.

import sys

x = [1, 2, 3]
print(sys.getrefcount(x))   # 2 (x + getrefcount arg)
y = x
print(sys.getrefcount(x))   # 3

sys.getrefcount()

sys.getrefcount(obj) geçerli referans sayısını döndürür. Not: Bu işlevi çağırmak, işlev argümanının referansı nedeniyle sayıya 1 ekler.

import sys

a = "hello"
print(sys.getrefcount(a))   # baseline (may be high for interned strings)

b = a
print(sys.getrefcount(a))   # one more
del b
print(sys.getrefcount(a))   # back to baseline

Artırma ve Azaltma

Her atama sayıyı artırır; her silme veya yeniden atama azaltır. Sayı 0'a ulaştığında CPython nesnenin bellekten kaldırma işlevini çağırır.

x = []          # refcount = 1
y = x           # refcount = 2
z = [x]         # refcount = 3  (list holds a reference)
del y           # refcount = 2
z.clear()       # refcount = 1
del x           # refcount = 0 → deallocated

Nesne İçselleştirme

CPython küçük tamsayıları (-5 ile 256 arası) ve birçok dize sabitini içselleştirerek aynı nesneyi yeniden kullanır. is karşılaştırmaları bunu ortaya çıkarır.

a = 256
b = 256
print(a is b)   # True (interned)

c = 257
d = 257
print(c is d)   # may be False (not interned)

Zayıf Referanslar

Zayıf referanslar referans sayısını artırmaz. Gözlemlemek istediğiniz ancak sahip olmak istemediğiniz nesnelerin çöp toplanmasını engellememek için kullanışlıdır.

import weakref

class BigObject:
    pass

obj = BigObject()
ref = weakref.ref(obj)
print(ref())   # <BigObject instance>
del obj
print(ref())   # None (object was collected)

Referans Döngüleri

A, B'yi ve B de A'yı referanslıyorsa, ikisi de erişilemez olduğunda bile hiçbiri 0'a ulaşmaz. CPython'ın döngüsel çöp toplayıcısı bunları algılar ve toplar.

a = []
b = [a]
a.append(b)   # cycle: a → b → a
del a, b
# Both are unreachable but refcount > 0
# The cyclic GC collects them

gc Modülü

gc modülü döngüsel çöp toplayıcıyı sağlar. Otomatik olarak çalışır, ancak elle tetiklenebilir veya devre dışı bırakılabilir.

import gc

gc.collect()   # force a collection cycle
print(gc.get_count())    # (gen0, gen1, gen2) allocation counts
print(gc.get_threshold())  # when each generation is collected

Bellek Havuzları (pymalloc)

CPython küçük nesneleri (< 512 bayt) kendi bellek havuzundan (pymalloc) ayırır; bu, her küçük nesne için malloc çağırmaktan daha hızlıdır.

# You do not call pymalloc directly — CPython uses it internally
# for all Python-level object allocations

# The pool pre-allocates large memory arenas
# and carves them into pools of fixed-size blocks

__del__ Sonlandırıcıları

Bir nesnenin referans sayısı 0'a ulaştığında (veya nesne bir döngüdeyse daha sonra) __del__ çağrılır. Kritik temizlik işlemleri için buna güvenmeyin; bunun yerine bağlam yöneticileri kullanın.

class Resource:
    def __del__(self):
        print(f"Freeing {self}")

# Better: use context manager
class SafeResource:
    def __enter__(self): return self
    def __exit__(self, *a): self.cleanup()

__slots__ ile Sıkı Nesneler

__slots__ içeren nesneler daha az bellek ve daha az ayırma işlemi kullanır; böylece çöp toplayıcı yükü azalır.

import sys

class Reg:
    def __init__(self, x, y): self.x, self.y = x, y

class Slotted:
    __slots__ = ("x","y")
    def __init__(self, x, y): self.x, self.y = x, y

print(sys.getsizeof(Reg(1,2)))      # ~48 + dict overhead
print(sys.getsizeof(Slotted(1,2)))  # ~48 (no dict)

Döngüsel Çöp Toplayıcıyı Devre Dışı Bırakma

Referans döngüleri oluşturmayan programlarda döngüsel çöp toplayıcıyı devre dışı bırakmak iş hacmini artırabilir.

import gc

gc.disable()   # no cyclic GC — objects are only freed by refcounting

# Use only if you KNOW no cycles are created
# (pure functional/immutable data)

gc.enable()    # re-enable

Hızlı Kontrol

CPython bir nesnenin belleğini ne zaman hemen serbest bırakır?

Özet

CPython nesneleri referans sayıları aracılığıyla izler. Sayı 0'a ulaşır → bellek hemen serbest bırakılır. Referans döngüleri döngüsel çöp toplayıcı (gc modülü) tarafından ele alınır. Kritik temizlik işlemleri için __del__ kullanmayın; bağlam yöneticilerini kullanın. Nesne başına bellek kullanımını azaltmak için __slots__ kullanın.

Sıkça Sorulan Sorular

“CPython Başvuru Sayımı” dersi ücretsiz mi?

Evet — “CPython Başvuru Sayımı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“CPython Başvuru Sayımı” dersinde ne öğreneceğim?

CPython'ın nesne ömürlerini başvuru sayaçlarıyla nasıl izlediğini öğrenin. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“CPython Başvuru Sayımı” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. CPython Başvuru Sayımı
  2. Çöp Toplayıcı ve Döngüsel Başvurular
  3. cProfile ve line_profiler ile Profil Oluşturma
  4. tracemalloc ile Bellek Profili Oluşturma
← Python Academy Sayfasına Dön