关于python的引用的问题

哪位大神能帮我看下下面的代码:

#!/usr/bin/env python
# encoding: utf-8
list = []
point = [0,0]
n = 0
x = [2,1,1,2]
for i in x:
    if n%4 == 0:
        for ii in range(i):
            point[1]+=1
            list.append(point)
            print point
    if n%4 == 1:
        for ii in range(i):
            point[0]-=1
            list.append(point)
            print point
    if n%4 == 2:
        for ii in range(i):
            point[1]-=1
            list.append(point)
            print point
    if n%4 == 3:
        for ii in range(i):
            point[0]+=1
            list.append(point)
            print point
    # print point
    print n
    n+=1
print list

运行的结果为什么是[[1, 1], [1, 1], [1, 1], [1, 1], [1, 1], [1, 1]]?

阅读 2.7k
3 个回答

list.append(point)

传递的是point的引用

改成list.append(type(point)(point))

话说list为什么要取名为list,把__built_in__里的list覆盖掉了

在你的代码中,第n+1次循环会修改第n次循环中的point的引用值。
可以在每次操作完point后,重新为point初始化,或者直接用非引用值。

  1 #!/usr/bin/env python                                              
  2 # encoding: utf-8                                                  
  3 list = []                                                          
  4 point = [0,0]                                                      
  5 n = 0                                                              
  6 x = [2,1,1,2]                                                      
  7 for i in x:                                                        
  8     if n%4 == 0:                                                   
  9         for ii in range(i):                                        
 10             point[1]+=1                                            
 11             tmp = point[1]                                         
 12             list.append([point[0], tmp])                           
 13             print point                                            
 14                                                       
 15     if n%4 == 1:                                                   
 16         for ii in range(i):                                        
 17             point[0]-=1                                            
 18             tmp = point[1]                                         
 19             list.append([point[0], tmp])                           
 20             print point                                            
 21                                                       
 22     if n%4 == 2:                                                   
 23         for ii in range(i):                                        
 24             point[1]-=1                                            
 25             tmp = point[1]                                         
 26             list.append([point[0], tmp])                           
 27             print point                                            
 28                                                       
 29     if n%4 == 3:                                                   
 30         for ii in range(i):                                        
 31             point[0]+=1                                            
 32             tmp = point[1]                                         
 33             list.append([point[0], tmp])                           
 34             print point                                            
 35                 
 36     # print point                                                  
 37     print n                                                        
 38     n+=1                                                           
新手上路,请多包涵

请问怎么对point进行初始化呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题