Ask Your Question
0

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

asked 2018-11-18 15:59:29 +0100

al gravatar image

updated 2018-11-18 19:27:16 +0100

slelievre gravatar image

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".

Help please!!!

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 flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2018-11-18 17:05:50 +0100

al gravatar image

updated 2018-11-18 19:33:10 +0100

slelievre gravatar image

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.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2018-11-18 15:59:29 +0100

Seen: 336 times

Last updated: Nov 18 '18