实现杨辉三角:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
先来看输出结果:
[1] [1, 1] [1, 2, 2] #问题在这,为什么最后一个元素是2?
再来看代码:
n=0 l=[1] g=[1] while n<3: print(g) l.append(0) g=l for i in range(len(l)): g[i]=l[i-1]+l[i] #在这里出了问题,我的思路是:
#当n=2,i=0时,l=[1,1,0] g=[1,1,0]
#n=2 i=1 l=[1,1,0] g=[1,2,0]
#n=2 i=2 l=[1,1,0] g=[1,2,1] 但是!,实际上在这 #一步中 l=[1,2,0],这是怎么回事? l=g n+=1
求大神们解答!!!
在python中g=n这时只是一个内存指向,并不是你新定义出来一个变量,如果你想定义一个新变量,你应该copy一份出来,比如
from copy import copy
n = [1, 2]
g = copy(n)
恩,谢谢啊!!
我靠!我现在搞懂了!!
先看代码:
>>> n=[1] >>> l=n >>> l [1] >>> n=[4] >>> l [1]
在上面的代码中,n变了,l 没有变。
>>> n=[1,2] >>> g=n >>> g [1, 2] >>> n[1]=3 >>> g [1, 3]
而这个代码中,n变了,g也跟着变了!!
具体是怎么回事还没搞懂,可能这就是list[num]的一个特性或者bug?
第一个例子和第二个不一样,并不是Bug
例子1:n=[4]后,l和n已经指向不同列表了
例子2:n[1]=3,修改的是同一个列表
嗯,谢谢啊!!