You will be given two positive integers m and n. You have to make a list of lists (which can be visualised as a matrix) of size m*n, that is m sublists (rows), with each sublist having n integers (columns).
The matrix should be such that it should have 1 on the border and 0 everywhere else. Check the coding quiz question below for more details.
Let’s see how you will convert this to code. Sajan will also explain what a deep and shallow copy is and how it can create severe problems while coding.
Deep and Shallow copy is one of the most significant error encountered. To illustrate the difference let us consider the following piece of code.
original_list=[0, 0, 0] copy1=original_list copy2=list(original_list) copy3=list.copy(original_list) original_list[0] = 1 print(copy1) print(copy2) print(copy3)
The output we were expecting is
[0, 0, 0] [0, 0, 0] [0, 0, 0]
Since all 3, copy1, copy2, copy3, are copies of original_list, any change in the original list should not be reflected in copy1, copy2 or copy3. However, the result we get is
[1, 0, 0] [0, 0, 0] [0, 0, 0]
Why is that?
Let's dig in a little deeper. When you make ANY data structure, you ask the computer to give you some space in its memory. Now when you asked the computer for original_list‘s space in the first line, it returned you the asked space.
Think of this as a box. You can store anything in this box: list, dict, anything. When you next asked copy1=original_list, you wanted a new box with its contents same as the box named original_list, but what the computer did was to give you the box named original_list instead of making a new box.
Now if you make changes in the content of the box using original_list or copy1, because it is the same box it will be reflected in other as well. This is called a shallow copy. It is called a deep copy when you make the computer give you a new box as in the case of copy2 and copy3.