Explain why creating a list of several instances of one element using something like my_list = [a] * 5 can result in strange behaviour

A good example for this would be>>> a = [0]>>> l = [a] * 5>>> l[[0], [0], [0], [0], [0]]>>> l[0][0] = 1>>> l[[1], [1], [1], [1], [1]]
You can see how creating a list of lists using multiplication results in the same object being passed rather than being cloned. This means that anytime any one element is changed in the lists, all elements change. Having a set to 0 (a single integer, instead of a list with a single integer), would work fine: that is because python copies integers differently than lists. This can get confusing, so you should always avoid statements like [a] * 5.

GM

Related Python Mentoring answers

All answers ▸

What is the difference between using range() and a list of values?


How do I use for loops in Python?


[Exam style] Python is an interpreted language. Explain what this means and how interpreted languages differ from compiled languages.


Write a recursive function that takes any integer n and prints the nth Fibonacci number.