关于python的引用的问题
怪我咯
怪我咯 2017-04-17 17:14:11
[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]]?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
迷茫

list.append(point)

传递的是point的引用

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

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

PHPz

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号