Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
185 views
in Technique[技术] by (71.8m points)

Unexpected list behavior in Python

I wanted to reverse a list, and I managed to do so, but in the middle of the work I noticed something strange. The following program works as expected but uncommeting line list_reversed[i]=list[len(list)-1-i] and print(list[i]) (commenting the last line of course) leads to a change in list. What am I not seeing? My Python version is 3.3.3. Thank you in advance.

list=[1,2,3,4,5,6]

list_reversed=list

for i in range(0,len(list)):

    #list_reversed[i]=list[len(list)-1-i]
    #print(list[i])

    print(list[len(list)-1-i])
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The following:

list_reversed = list 

makes the two variables refer to the same list. When you change one, they both change.

To make a copy, use

list_reversed = list[:]

Better still, use the builtin function instead of writing your own:

list_reversed = reversed(list)

P.S. I'd recommend against using list as a variable name, since it shadows the builtin.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...