Skip to content

Instantly share code, notes, and snippets.

@hygull
Last active June 28, 2019 23:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hygull/7dc8425b2566151ffc2e889cf55f625f to your computer and use it in GitHub Desktop.
Save hygull/7dc8425b2566151ffc2e889cf55f625f to your computer and use it in GitHub Desktop.
Solution to a list dict base problem, https://stackoverflow.com/questions/56814001/updating-json-fields-with-values-from-list (Unfortunately, the guy deleted the post)

Problem

In Python, list, dictionary are reference types. So if you will append the same dictionary to a list and if you will make any change to any of the dictionary, it will reflect in all other as well because all are pointing to the same memory location.

>>> l = [{"name": "Raghavendra Thakur", "age": 27}] * 4
>>> 
>>> l
[{'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}]
>>> 
>>> l[0]
{'name': 'Raghavendra Thakur', 'age': 27}
>>> 
>>> l[0]["name"] = "Malinikesh Agrawani"
>>> 
>>> l
[{'name': 'Malinikesh Agrawani', 'age': 27}, {'name': 'Malinikesh Agrawani', 'age': 27}, {'name': 'Malinikesh Agrawani', 'age': 27}, {'name': 'Malinikesh Agrawani', 'age': 27}]
>>> 
>>> 

Simple solution

Please take care while forming the list

>>> # Let's stop above problem
... 
>>> l2 = []
>>> for i in range(4):
...     l2.append({"name": "Raghavendra Thakur", "age": 27})
... 
>>> l2
[{'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}]
>>> 
>>> l2[0]
{'name': 'Raghavendra Thakur', 'age': 27}
>>> 
>>> l2[0]['name'] = "Malinikesh Agrawani"
>>> 
>>> l2
[{'name': 'Malinikesh Agrawani', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}, {'name': 'Raghavendra Thakur', 'age': 27}]
>>> 
>>> 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment