Kezdőoldal » Számítástechnika » Programozás » Python: mi a különbség a két...

Python: mi a különbség a két list között?

Figyelt kérdés

[link]


A és B mért működik máshogy?



2018. nov. 5. 12:26
 1/3 anonim ***** válasza:
100%

Egy kicsit másképp felírva:


x = ['.', '.', '.']

a = x*3


vagyis a=[x,x,x]


namost 'a' bármelyik elemét változtatod meg tulajdonképpen x-et változtatod. És mivel a = [x,x,x] ezért mindenhol módosul.


Az a[1][1] helyett változtathatod az a[0][1]-et vagy az a[2][1]-et is, ugyanaz lesz az eredmény.


A b tömbnél minden elemet egyedileg határoztál meg ezért a b[1][1] nem ugyanoda mutat mint pl a b[0][1]

2018. nov. 5. 12:52
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
köszi
2018. nov. 5. 12:55
 3/3 Ozmium42 ***** válasza:
100%

Első lista: egyetlen objektumot hoz létre, és három hivatkozást a megfelelő memóriacímre. Mind a három elem ugyanarra a memóriacímre mutat, ezt az id() függvénnyel ellenőrizheted. id(a[0]) == id(a[1]) == id(a[2]). Amikor pythonban egy listát úgy sokszorosítasz, hogy megszorzod egy számmal, mindig ez történik. Bármelyik listát módosítod, az a többi példánnyal is megtörténik.


Ezzel szemben a másik listában három különböző listát hozol létre. Az elemeik azonosak, de a memóriacímük nem. Ezért ha az egyiket megváltoztatod, az nem érinti a többit. Az első listában tapasztalt anomáliát így tudod kikerülni:


a = [["."]*3 for i in range(3)]


Ez a b-nek megfelelő listát adja eredményül.


Továbbá van egy copy nevű modul, amiben a copy és deepcopy szintén segíthet, ha úgy akarod az egyik listát módosítani, hogy a többi ne változzon:


>>> a = [["."]*3]*3

>>> a_1 = copy(a[1][1]) #kimented változóba a lista másolatát

>>> a_1[1] = "X" # ezt módosítod

>>> print a_1

['.', 'X', '.']

>>> print(a) # Az eredeti lista változatlan.

[['.', '.', '.'], ['.', '.', '.'], ['.', '.', '.']]

2018. nov. 5. 13:01
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!