[python] nechtene propojeni mnozin

rajcze rajcze na gmail.com
Čtvrtek Říjen 14 12:51:41 CEST 2010


Tohle je samozrejme taky moznost, ale pokud bys mel v R0 mutable
objekty, tak by sis porad nepomohl - list(R0) totiz jen zkopiruje
reference, nevytvari nove objekty. Mutable/immutable je (pro mne) asi
ta nejhur vysvetlitelna cast pythonu pro "novacky" (protoze se to
chova na prvni pohled dost nekonzistentne).


from copy import deepcopy

class MyClass(object):
    def __init__(self, val = 0):
        self.val = val
    def __repr__(self):
        return (str(self.val))

a = []
for i in range(8):
    a.append(MyClass(i))

print a

b = list(a)
c = deepcopy(a)

a.append(MyClass("novy"))
b[0].val = "foo"
c[1].val = "bar"

print id(a), id(b), id(c)
print a, b, c


naprosto logicke, pokud vis jak funguje mutable/imutable, ale na prvni
pohled absolutne nepochopitelne :)

2010/10/14 Juda Kaleta <juda.kaleta na gmail.com>:
> V Pythonu se nepracuje s proměnnými jako takovými, ale pouze referencemi na
> objekt. Proto se přiřazením
>
> R0work = R0
>
> pouze změní reference na jeden a tentýž objekt. Pro naklonování, vytvoření
> nového objektu, je potřeba zavolat něco takovéhoto:
>
> R0work = list(R0)
>
> S pozdravem,
> Juda Kaleta
>
> 2010/10/14 Charlotte van Leeweneck <vanleeweneck.charlotte na gmail.com>
>>
>> Dobry den,
>>
>> potrebovala bych pomoci s nasledujicim problemem.
>>
>> R0=[]
>> for x in range (8):
>>    R0.append(x)
>> R0work=R0
>> R0work[-1]=0
>>
>> print(R0)
>> print (R0work)
>>
>>
>> Cílem bylo, aby mi to nahradilo posledni prvek v mnozine R0work prvkem 0,
>> ale mozinu R0 nechalo nedotcenou
>> tj. pozadovaný vysledek R0=[0, 1, 2, 3, 4, 5, 6, 7], R0work=[0, 1, 2, 3,
>> 4, 5, 6, 0]
>> Bohuzel to tak nefunguje a nahrazuje posledni prvek v obou mnozinach. Kde
>> delam chybu?
>>
>>
>> Dekuji za odpoved.
>> Sarka
>>
>>
>> _______________________________________________
>> Python mailing list
>> Python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>



-- 
Rules of Optimization:
Rule 1: Don't do it.
Rule 2 (for experts only): Don't do it yet.


Další informace o konferenci Python