Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 8. diel - Kopírovanie objektov v Pythone

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Milan Pavlíček:26. júna 19:56

Docela složitě napsané.
Musel jsem si to několikrát přečíst, abych pochopil.
Každý má jinou představivost a pochopení.

Avatar
Jan Kupčík
Člen
Avatar
Odpovedá na Mirek Benešovský
Jan Kupčík:26. novembra 12:04

Taky jsem si říkal, že to je spíš naopak, že reference jsou nezávisle a když změníme jednu ta druhá stále funguje viz příklad None u předchozí lekce.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Jan Kupčík
DarkCoder:26. novembra 13:16

Samozřejmě že ta formulace je chybně.

Máme-li 2 reference na tentýž objekt, pak změna jedné z nich (ukazuje jinám nebo na nic) neovlivní druhou referenci.

Pravděpodobně to bylo myšleno následovně.

Máme-li 2 reference na tentýž objekt, pak změna objektu pomocí jedné reference se projeví při přístupu k objektu pomocí druhé reference.

Příklad:

class Uzivatel:
    def __init__(self, jmeno, vek):
        self.jmeno = jmeno
        self.vek = vek

    def __str__(self):
        return f"{self.jmeno} ({self.vek})"


# --- vytvoření dvou objektů ---
u = Uzivatel("Jan Novák", 28)
v = Uzivatel("Josef Nový", 32)

print("Původní objekty:")
print(f"u: {u}, id(u)={id(u)}")
print(f"v: {v}, id(v)={id(v)}\n")

# --- přiřazení reference ---
u = v  # teď obě proměnné ukazují na tentýž objekt (Josef Nový, 32)
# Původní objekt "Jan Novák" už nemá žádnou referenci → může být uvolněn garbage collectorem
print("Po přiřazení 'u = v':")
print(f"u: {u}, id(u)={id(u)}")
print(f"v: {v}, id(v)={id(v)}\n")

# --- změna atributu objektu ---
v.jmeno = "John Doe"
print("Po změně atributu přes 'v':")
print(f"u: {u}, id(u)={id(u)}")  # u také vidí změnu
print(f"v: {v}, id(v)={id(v)}\n")

# --- změna reference ---
v = Uzivatel("Nový uživatel", 40)  # v nyní ukazuje na nový objekt
# Původní objekt (John Doe, 32) stále existuje, protože na něj ukazuje 'u'
print("Po změně reference 'v':")
print(f"u: {u}, id(u)={id(u)}")  # u stále ukazuje na původní objekt
print(f"v: {v}, id(v)={id(v)}")  # v ukazuje na nový objekt
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Jan Kupčík
Člen
Avatar
Odpovedá na DarkCoder
Jan Kupčík:26. novembra 15:14

"Máme-li 2 reference na tentýž objekt, pak změna objektu pomocí jedné reference se projeví při přístupu k objektu pomocí druhé reference."

Trvrzením výše máš na mysli nasledující blok kódu?

# --- změna atributu objektu ---
v.jmeno = "John Doe"
print("Po změně atributu přes 'v':")
print(f"u: {u}, id(u)={id(u)}")  # u také vidí změnu
print(f"v: {v}, id(v)={id(v)}\n")
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Jan Kupčík
DarkCoder:26. novembra 15:19

Ano, přesně tak.

v.jmeno = "John Doe"

to je změna objektu pomocí v. A jelikož obě reference (u i v) ukazují na tentýž objekt, pak se změna promítne při přístupu k objektu pomocí u.

print(f"u: {u}, id(u)={id(u)}")  # u také vidí změnu
Editované
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 5 správy z 15.