首页 > 关于python的引用的问题

关于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]]?


在你的代码中,第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进行初始化呢?


list.append(point)

传递的是point的引用

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

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

【热门文章】
【热门文章】