Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Python解説

Pythonの「+」と「+=」の違いについて解説。加算演算子と累算代入演算子の違いとは?

Pythonの加算演算子「+」と累算代入演算子「+=」は何が違うのか?初心者向けにわかりやすく解説。

今回のPython初心者・入門者の解説は、よく似ている演算子同士の違いについての解説です。特に、

  • 加算演算子「+」
  • 累算代入演算子の1つである「+=」

この2つの違いを解説します。

正直、両者の違いは個人でちょっとしたコードを書く場合にはあまり気になるものではないかもしれません。

ですが知っておくとPythonだけに限らず、今後さまざまな他のプログラミング言語を学習する際にも役立つ知識になると思います。ぜひ読んでみて、また実際にご自身でも確かめてみてください。

「+」と「+=」の結果は同じ?

まず、基本的すぎることですが次のコードを見てください。

まず加算演算子「+」を使って代入するものです。

a=1
a=a+1  # 結果:2

次に累算代入演算子の1つである、「+=」を使ったものを。

a=1
a+=1  # 結果:2

結果は同じ「2」となります。

  • 加算演算子「+」を使って代入した場合
  • 累算代入演算子「+=」を使った場合

これらは、「一見すると」同じものだと考えられます。

ミュータブルオブジェクトを使って、「+」と「+=」の違いを検討

しかし、実はちょっとした違いがあります。それは作成されるオブジェクト(代入演算子の左辺のオブジェクト)のアドレスが異なるという点です。

今回はミュータブルオブジェクトを代入した場合で検討してみましょう。ミュータブルオブジェクトの代表例であるリストを使って考えていきます。

加算演算子「+」を使った場合のアドレス

まずは加算演算子「+」を使ったコードを見て下さい。

# 加算演算子「+」を使った場合
d=[1, 2]  # リストはミュータブルオブジェクト
id(d)  # 結果①
d=d+[3]  
d  # 結果:[1, 2, 3]
id(d)  # 結果②

まず最初に新しいリスト[1, 2]を作成し、dに代入しています。そしてそのdのアドレスをid()関数を使って調べています。その結果が①です。どんな数字の羅列になるのかは皆さんの環境によって異なります。

次にそのリストの要素の最後に「3」を加えてみたのが、

d=d+[3]

の部分です。これでリストの内容が変更されたわけです。

そして変更後のリストのアドレスを調べた結果が②です。

ここで、気づいてもらいたいのが、

結果① ≠ 結果②

ということです。

累算代入演算子の1つ「+=」を使った場合のアドレス


# 累積代入演算子の1つ「+=」
e=[1, 2]
id(e)  # 結果③
e+=[3]  # 累算代入演算子を使っている
e  # 結果:[1, 2, 3]
id(e)  # 結果④(結果③と同じ値)

これもやっていることは上の加算演算子を使ったことと同じです。最初に作ったリスト[1, 2]を、累算代入演算子「+=」を使って[1, 2, 3]へと変更しているだけです。

しかし、このコードでは、

結果③ = 結果④

となります。加算演算子では、それらは異なるものでした。

まとめ

以上の結果をまとめると、ミュータブルオブジェクトを使った場合の相違点は次のようになります。

加算演算子を使ったとき累算代入演算子を使ったとき
動作の内容既存のミュータブルオブジェクトを使って、新しいミュータブルオブジェクトを作成既存のミュータブルオブジェクトそれ自体を変更。新しいミュータブルオブジェクトはつくらない
オブジェクトのアドレスについて既存のオブジェクトのアドレスと、新しいオブジェクトのアドレスは異なるオブジェクトのアドレスは変わらない
加算演算子と累算代入演算子の違い

プログラミングを学びIT業界へ転職するなら現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのが良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。

など各種の講座が用意されています。無料で体験できるテックアカデミー無料体験も用意されています。

愛を分かち合いましょう