Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
今回のPython初心者・入門者の解説は、よく似ている演算子同士の違いについての解説です。特に、
この2つの違いを解説します。
正直、両者の違いは個人でちょっとしたコードを書く場合にはあまり気になるものではないかもしれません。
ですが知っておくとPythonだけに限らず、今後さまざまな他のプログラミング言語を学習する際にも役立つ知識になると思います。ぜひ読んでみて、また実際にご自身でも確かめてみてください。
Contents
まず、基本的すぎることですが次のコードを見てください。
まず加算演算子「+」を使って代入するものです。
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つ「+=」
e=[1, 2]
id(e) # 結果③
e+=[3] # 累算代入演算子を使っている
e # 結果:[1, 2, 3]
id(e) # 結果④(結果③と同じ値)
これもやっていることは上の加算演算子を使ったことと同じです。最初に作ったリスト[1, 2]を、累算代入演算子「+=」を使って[1, 2, 3]へと変更しているだけです。
しかし、このコードでは、
結果③ = 結果④
となります。加算演算子では、それらは異なるものでした。
以上の結果をまとめると、ミュータブルオブジェクトを使った場合の相違点は次のようになります。
加算演算子を使ったとき | 累算代入演算子を使ったとき | |
---|---|---|
動作の内容 | 既存のミュータブルオブジェクトを使って、新しいミュータブルオブジェクトを作成 | 既存のミュータブルオブジェクトそれ自体を変更。新しいミュータブルオブジェクトはつくらない |
オブジェクトのアドレスについて | 既存のオブジェクトのアドレスと、新しいオブジェクトのアドレスは異なる | オブジェクトのアドレスは変わらない |
プログラミングを学びIT業界へ転職するなら現役エンジニアから学べるプログラミングスクールTechAcademy [テックアカデミー]でオンライン講座を受講するのが良いと思います。1人で悩みながら学習を進めるよりもわかりやすく、費やす時間も少なく合理的・効率的に学習できるからです。
など各種の講座が用意されています。無料で体験できるテックアカデミー無料体験も用意されています。