Discuss / Python / 不知道这样错在哪里了

不知道这样错在哪里了

Topic source
L = [1]
while True:
    yield L
    L.append(0)
    L = [L[i - 1] + L[i] for i in range(len(L))]

求学者号

#2 Created at ... [Delete] [Delete and Lock User]

看廖大的测试代码! 出现这个现象的表象原因是判断的时候正确与否的条件是: result = 结果 和t没有关系,但是你打印的是t,你欺骗了自己的眼睛。 根本原因是传址的问题,举例说明:

res = []
a = [1]
b = a  #--->此时,a和b实际指向同一个地址
res.append(b)
print(res) #--->[[1]]
a.append(0)
print(res) #--->[[1, 0]] 改变了a,res也跟着变了
#我们再看一下b
print(b) #--->[1, 0]

#这种现象就叫做传址,指向的是同一个地址,改变地址中的数据,所有指向它的变量随之改变
#再来

a = [1,1]
print(b) # --> [1, 0] 我改变了a 为什么b没变,是因为对变量本身赋值会改变数据指向,新数据会重新创建地址,这时候再 a.append() 操作就不会改变b的值

所以根本原因实际是传址造成的。


  • 1

Reply