Diskuze: Rušení referencí
Zobrazeno 7 zpráv z 7.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
Objekt bude zrušený až ve chvíli, kdy už na něj nebudou existovat žádné reference.
import weakref
class Reference():
_count = 0
def __init__(self):
print("Začátek objektu.")
Reference._count += 1
self.number = Reference._count
def __del__(self):
print("Konec objektu.")
if Reference: Reference._count -= 1
def __repr__(self):
return "Ref: {}".format(self.number)
@staticmethod
def get_count():
return Reference._count
if __name__ == "__main__":
r1 = Reference()
r2 = Reference()
r3 = Reference()
assert Reference.get_count() == 3, "Počet instancí 3, což je v pořádku"
del(r3)
assert Reference.get_count() == 2, "Počet instancí 2, také dobře."
seznam = [weakref.ref(r1), weakref.ref(r2)]
print([i() for i in seznam])
del(r2)
print([i() for i in seznam])
assert Reference.get_count() == 1, "Já bych chtěl, prosím, jen r1 :)"
Ale abych Ti zamotal hlavu, zamysli se nad následujícím příkladem.
import weakref
import gc
class Reference():
_count = 0
def __init__(self):
print("Začátek objektu.")
Reference._count += 1
self.number = Reference._count
def __del__(self):
print("Konec objektu %s" % self.number)
if Reference: Reference._count -= 1
def __repr__(self):
return "Ref: {}".format(self.number)
@staticmethod
def get_count():
return Reference._count
if __name__ == "__main__":
gc.disable() # kvuli pythonu < 3.4
r1 = Reference()
r2 = Reference()
r3 = Reference()
r1.next = r2
r2.next = r3
r3.next = r1
w1 = weakref.ref(r1)
del(r1)
del(r2)
del(r3)
print("prave jsem odstranil reference")
r4 = Reference()
r5 = Reference()
w1().next = None
Mimochodem, Python 3.3 a 3.4 se budou chovat naprosto odlišně kvůli změně v GC.
Ahoj,
díky za ten tip, vypadá to, že dělá přesně to, co jsem potřeboval. I
když teď musím ještě prozkoumat, co to vlastně použití weakref znamená
a jak se s nimi dělá.
Co se týče toho druhého kódu, tak si buď jistý, že mi právě teď
nezamotáš hlavu víc než to víno, co jsem za večer vypil 
Slibuji, že se nad ním důkladněji zamyslím ráno, i když ti musím
škodolibě sdělit, že mám python 3.3, takže jsem z obliga 
Líbí se mi ale ta technika, kterou jsi použil. Skoro se mi chce říct, že
je to dobré kung fu... 
r1.next = r2
r2.next = r3
r3.next = r1
Po sem mi je vše jasné (za předpokladu, že gc je garbage collector), nicméně ta další část mi už tak jasná není. Hlavně proto, že nevím, co dělají ty závorky u posledního řádku:
w1().next = None #w1 by mělo být právě teď None nebo nedefinované, ne?
Tak a teď k té druhé části.
Chová se nečekaně, i v 3.3. Opravdu to není None, jak jsem myslel. Ve
skutečnosti zůstala zachovaná weakref, i když by podle mne neměla.
Takže teď bych poprosil o vysvětlení 
retain cycle
GC jsem vypnul, aby se 3.3 chovala stejně jako 3.4 (3.3 je verze, která se
chová špatně, 3.4 už je opravená)
https://docs.python.org/…rary/gc.html?…
přepni si dokumentaci na verzi 3.3
Počkej,
tím chceš naznačit, že to je žádoucí chování? Já myslel, že to byl
nějaký vtipný bug, odstraněný v pythonu od verze 3.
Zobrazeno 7 zpráv z 7.
