# Objects all have the same x/y values

The function `reset` is shown below:

``````def reset(ar,ob,num):
ar = [];
a = 0
while a <= num-1:
ar.append("")
ar[a] = ob
a +=1
return ar
``````

With this function, the array `coins` has several objects appended to it like so-

``````coins = reset(coins, p(0, 0, "5", 0, , []), coinnum)
``````

Then, each of those objects in the coins array has their x/y properties randomly generated with the function `spawn()`.

``````for a in range(len(coins)):
coins[a].spawn()
``````

The thing is, every single one of those objects is set to the exact same x/y values.

1 Like

@QwertyQwerty88 sorry, this topic was set to the wrong category. If you could move it to the Python section, it’d be appreciated.

1 Like

Could you please show the code for `spawn()`?

1 Like

Let me understand, you want to reset ar to a list containing num times ob ?

This is just done with ar = [ob] * num , so your finction is just:

``````def reset(ar,ob,num):
return ar = [ob] * num
``````

Because this is what your reset does.

@whileTRUEpass thx for shortening it, each object should be a new object, but it seems like they’re all treated like the same one.

@Firepup650 this is `spawn()`:

`````` def spawn(self):
randx = random.randint(0, len(grid.ar) - 1)
if randx > len(grid.ar) - 0.5:
self.x = math.floor(randx)
else:
self.x = round(randx)

randy = random.randint(0, len(grid.ar) - 1)
if randy > len(grid.ar) - 0.5:
self.y = math.floor(randy)
else:
self.y = round(randy)
grid.set(self)
``````

Yes they are. when you write something like ar[i] = ob, you are doing what is called a shallow copy, you are just copying the memory link to where the object is.
You need to make a deep copy, either by hand or by using copy or deepcopy.

this thread on stack exchange might help understanding the issue

https://stackoverflow.com/questions/17246693/what-is-the-difference-between-shallow-copy-deepcopy-and-normal-assignment-oper

2 Likes

Thanks. Took some editing, but it works.

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.