ここから本文です

プログラミング初心者です。 pythonにおけるタプルのアンパックについて質問です...

アバター

ID非公開さん

2019/8/1910:07:07

プログラミング初心者です。
pythonにおけるタプルのアンパックについて質問です。

とあるサイトでフィボナッチ数列を求める数列として下記が紹介されていました。

a=b=1
while a < 100:
print(a)
(a, b) = (b, a+b)
結果:
1
1
2
3
5
8
13
21
34
55
89

この中で、タプルで値を指定している箇所を、下記の通りに変更すると、結果が変わってしまいました。
a=b=1
while a < 100:
print(a)
a =b
b = a+b
結果:
1
1
2
4
8
16
32
64
タプルのアンパックとして考えると、同じ値になると思っていたのですが、
異なる理由は何でしょうか。

補足※実際にはprint(a)以降はインデントしています。

閲覧数:
20
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

ikt********さん

2019/8/1910:25:48

(a, b) = (b, a+b)

a =b
b = a+b
は、等価じゃありません。

後者は a が更新(bの値で上書き代入)されてしまってから、
b = a + b
が計算されるから。

前者は、そうではありません。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2019/8/19 10:43:13

tmpを用いた説明ですぐに理解することができました!
素早い回答、誠にありがとうございました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる