Oglejmo si ta primer:
>>> a = [1, 2, 3] >>> b = a >>> a[1] = 7 >>> a [1, 7, 3]
Povsem pričakovano, kajne? Ko izpišemo še tabelo b
, pa nas python preseneti:
>>> b [1, 7, 3]
Kako lahko sprememba tabele a
vpliva na tabelo b
? Pričakovali bi, da stavek b = a
ustvari novo tabelo b
in vanjo skopira elemente tabele a
. Vendar pa se to ne zgodi. Spremenljivka a
namreč ne vsebuje celotne tabele a
, pač pa zgolj njen pomnilniški naslov, torej mesto, kjer se tabela nahaja v računalnikovem pomnilniku. Pravimo, da je spremenljivka a
zgolj kazalec na tabelo [1, 2, 3]
b = a
, se v spremenljivko b
skopira samo pomnilniški naslov. Sedaj imamo torej dve spremenljivki, ki kažeta na isto tabelo:
Prireditev a[1] = 7
nastavi drugi element tabele na vrednost 7:
Kako pa tabelo dejansko kopiramo (podvojimo)? Z izrazom tabela[:]
:
>>> a = [1, 2, 3] >>> b = a[:] >>> a[1] = 7 >>> a [1, 7, 3] >>> b [1, 2, 3]
Sedaj imamo ločeni tabeli, na kateri kažeta spremenljivki a
in b
:
Pri preprostih podatkovnih tipih, kot so cela in realna števila, teh težav nimamo. Preizkusi sam(-a)!