You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两段Python斐波那契代码输出结果不同,求差异及原因解析

两段斐波那契代码的差异及结果不同的原因

原Python 3.7文档中的正确代码及运行结果:

>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while a < 10:
...     print(a)
...     a, b = b, a+b
...
0
1
1
2
3
5
8

改写后的代码及运行结果:

>>> a, b = 0, 1
>>> while a < 10:
    print(a)
    a = b
    b = a + b
0
1
2
4
8

核心差异与原因

两段代码的本质区别在于变量赋值的执行逻辑:

  • 原代码使用a, b = b, a+b这种元组解包式的同时赋值:Python会先计算等号右侧所有表达式的结果(此时用的是赋值前的a和b旧值),再一次性将结果分别赋给左侧的a和b。这完全符合斐波那契数列的定义——下一个数是前两个数的和。
  • 改写后的代码是分步顺序赋值:先执行a = b,把b的当前值赋给a,此时a已经被更新;接着执行b = a + b,这里的a已经是刚更新后的新值,所以实际计算的是b = 旧b + 旧b,也就是把b变成了原来的两倍,最终得到的是2的幂次序列,而非斐波那契数列。

举个循环步骤的具体对比:

  • 第一次循环后:
    • 原代码:a=1,b=0+1=1
    • 改写代码:a=1,b=1+1=2
  • 第二次循环后:
    • 原代码:a=1,b=1+1=2
    • 改写代码:a=2,b=2+2=4

这样一步步执行下来,最终结果自然完全不同。

内容的提问来源于stack exchange,提问作者Sikeh Japhet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:50:23