Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
List repetition
#1
my question here
I was experimenting with lists and this particular behavior of python caused me some confusion. Can anyone please clarify if what i think is right.
myList = [[1,2,3]] * 3
myList[0]=[1,2,3,4]
now when i print myList i get the following output: [[1,2,3,4],[1,2,3],[1,2,3]]
suppose i make a small change like this:
myList = [[1,2,3]] * 3
myList[0].append(4)
now when i print myList i get the following output: [[1,2,3,4],[1,2,3,4],[1,2,3,4]]

Since all 3 lists are one single list object with 3 references is this happening because in the first case I'm actually assigning a new object to the first position and in the second case I'm modifying the object that all 3 lists are referring to?
Reply
#2
yes, your understanding is correct. Append modify the list in place, so you change the object that has 3 references to it. While in the former case you assign new different object to index 0.
Reply
#3
Python does not duplicate an object in the memory.
In [1]: a = 2

In [2]: b = 2

In [3]: id(a)
Out[3]: 10914400

In [4]: id(b)
Out[4]: 10914400
https://www.youtube.com/watch?v=F6u5rhUQ6dU
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#4
Here just some test,so can you think of we they are different.
>>> lst_1 = [[1,2,3]] * 3
>>> lst_2 = [[1,2,3] for i in range(3)]
>>> lst_1
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> lst_2
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>> 
>>> lst_1[0].append(4)
>>> lst_2[0].append(4)
>>> lst_1
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
>>> lst_2
[[1, 2, 3, 4], [1, 2, 3], [1, 2, 3]]
>>> 
>>> [id(i) for i in lst_1]
[23028560, 23028560, 23028560]
>>> [id(i) for i in lst_2]
[65702968, 65711560, 65708120]
>>> 
>>> help(id)
Help on built-in function id in module builtins:

id(obj, /)
   Return the identity of an object.
   
   This is guaranteed to be unique among simultaneously existing objects.
   (CPython uses the object's memory address.)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Way to avoid repetition? Tuxedo 5 2,852 Feb-16-2021, 08:02 PM
Last Post: Tuxedo
  question about you want repetition this task loczeq 6 3,346 Mar-05-2020, 08:35 PM
Last Post: loczeq
  Random nr. no repetition & printing multiple lines Joey 7 2,788 Feb-05-2020, 04:23 PM
Last Post: Larz60+
  About generating N integer numbers without repetition Otbredbaron 3 3,863 Jan-30-2018, 12:08 PM
Last Post: Otbredbaron

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020