Friday 15 May 2015

python - List of lists changes reflected across sublists unexpectedly -


I need to create a list of lists in Python, so I typed the following:

 < Code> MyList = [[1] * 4] * 3  

The list looks like this:

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

Then I changed one of the lowest values:

 
  [[5, 1, 1, 2] 1], [5, 1, 1, 1], [5, 1, 1, 1]]  

What I wanted or was not expected could anyone understand this Whether that Is and how to get around it?

When you must [X] * 3 Get the code> [x, x, x] . That is, a list with 3 references of the same x when you modify this single x , it appears through three contexts.

To fix this, you need to make sure that you create a new list in each case. One way to do this

  [4] (3) for n for category [[]]  

multiplier operator * is running on objects, without seeing expression When you use * to multiply [[1] * 4] by [3], * , then only 1-element The list evaluates [code] [[1] * 4] , no [[1] * 4 expression text * does not know that How to make copies of the element, it is not known how to evaluate [[1] * 4] again, and you do not want any copies, and in general, there is no need to copy the element There can be no way too.

The only option * is to make new references to the current abbolist instead of trying to create new Upanishads; something else would be incompatible or to provide a fresh start to the design decisions of the original language Will be required.

On the contrary, the understanding of a list re-evaluates the element expression on each walk. [[1] * range for 4 (3)] reevaluates [1] * 4 for every single reason [x ** 2x range] Every evaluation of [1] * 4 every time creates a new list in the (3)] revalue x ** 2 , so understanding the list Who wants

Incidentally, [1] * 4 does not even copy the elements of [1] , but it does not matter because Integers are irreversible. You can do nothing like 1.value = 2 and can change 2 in 1.


No comments:

Post a Comment