python - Making a copy of a list -


i'm trying make "target", copy of "grid." don't see why code not work.

grid = [[randint(0, 1), randint(0, 1), randint(0, 1)],         [randint(0, 1), randint(0, 1), randint(0, 1)],         [randint(0, 1), randint(0, 1), randint(0, 1)]]  target = [[0, 0, 0]] * 3 x in range(3):     y in range(3):         target[x][y] = grid[x][y]  print target print grid 

here's result:

[[0, 1, 0], [0, 1, 0], [0, 1, 0]] [[1, 0, 0], [0, 1, 1], [0, 1, 0]] 

this part:

target = [[0, 0, 0]] * 3 

creates list same list repeated 3 times. changes 1 item reflects in (they same object). want create list 3 times:

target = [[0, 0, 0] _ in range(3)] 

you should use star operator on list (or list multiplication) immutable objects (if @ all), not have problem since can't change states.

don't forget can use (x[:] used create shallow copy of list named x, list(x)):

grid = [x[:] x in target] 

or more copy.deepcopy:

from copy import deepcopy grid = deepcopy(target) 

Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

ios - Possible to get UIButton sizeThatFits to work? -