# question about Python assignment of lists; meaning of equals sign; how to save a list?

I have a list, then modify it, but want to save the old list to then modify in a different way. I try to save the original using a different name and =, but it seems the two names are forever linked by the equals sign, so the modification also changes the original. Why does this happen, and how do I deal with this?

Example:

sage: L1 = [1, 2]
sage: L2 = [3, 4]
sage: L3 = L1
sage: L1
[1, 2]
sage: L2
[3, 4]
sage: L3
[1, 2]
sage: L1.extend(L2)
sage: L1
[1, 2, 3, 4]
sage: L2
[3, 4]
sage: L3
[1, 2, 3, 4]


The same thing happens with "append".

Note: this does not happen with variables with numerical (not list) values. For example:

sage: a = 4
sage: b = a
sage: a = 5
sage: a
5
sage: b
4


So it seems that the equals sign means two different things: for numbers it is an assignment; for lists it is an identification. This is driving me crazy. I cannot find it explained anywhere (maybe because it is so "well-known"?)

edit retag close merge delete

Sort by ยป oldest newest most voted

I think I just found what the problem is: "This is really a matter of how Python handles assignments of lists."

Here is the solution:

sage: L1 = [1, 2]
sage: L2 = [3, 4]
sage: L1
[1, 2]
sage: L2
[3, 4]
sage: L1.extend(L2)
sage: L1
[1, 2, 3, 4]
sage: L2
[3, 4]
sage: L3 = L1[:]
sage: L3
[1, 2, 3, 4]
sage: L1.append(8)
sage: L1
[1, 2, 3, 4, 8]
sage: L3
[1, 2, 3, 4]


I found the explanation in @calc314's answer to Ask Sage question 25998 by @ikol.

more