Python文法

【Python】ミュータブルとイミュータブルを理解する

当サイトは広告を利用しています。

Pythonではオブジェクトによってミュータブルとイミュータブルに分類されます。
本記事ではこの2つの違いと注意点について解説します。

Python 基礎文法の教科書を執筆しました!

ミュータブルとは値を変更できるオブジェクトのこと

ミュータブルとは値を変更できるオブジェクトのことです。
主な型はリストや辞書などがあります。

イミュータブルとは値を変更できないオブジェクトのこと

イミュータブルとは値を変更できないオブジェクトのことです。
主な型はタプルや文字列などがあります。

なぜPythonの文字列はイミュータブルなのですか?

これにはいくつかの利点があります。

一つはパフォーマンスです。文字列がイミュータブルなら、生成時に領域を割り当てることができるので、必要な記憶域は固定されて、変更されません。これはタプルとリストを区別する理由の一つでもあります。

他の利点は、Python の文字列は数と同じくらい “基本的” なものと考えられることです。8 という値を他の何かに変える手段が無いように、文字列 “eight” を他の何かに変える手段も無いのです。

デザインと歴史 FAQ ー Python公式ドキュメント

id関数を使って確認する

ミュータブルなオブジェクトは、要素の追加・削除などをしてもIDは変わりません。またイミュータブルなオブジェクトは、同じIDのまま値を変更することはできません。

関連記事
【Python】識別値を取得できるid関数について解説

ミュータブル・イミュータブルオブジェクトの注意点

ミュータブル・イミュータブルオブジェクトの注意点を解説します。

同じオブジェクトを参照する時としない時がある

Pythonにおいてミュータブルオブジェクトは同じ値を持ったとき、違うオブジェクトを参照することが保証されていますが、イミュータブルオブジェクトは同じオブジェクトを参照するときもあるし、そうでないときもあります。

つまり、a = 1、b = 1としたとき、a と b は値 1 を持つ同じオブジェクトを参照する時としないときがあります。しかし、c = []、d = [] とすると、 c と d は異なったリストを参照することが保証されているということです。

詳細はこちらをご確認ください。

デフォルト値は1回しか評価されない

関数のデフォルト値は1回しか評価されません。
よって、ミュータブルオブジェクトの場合に影響を受けます。

1回しか評価されないのでリストに値が追加されていく形になります。

デフォルト値はnum_lists = []の部分です。関数を呼び出したときに引数を与えないとデフォルト値が使用されます。

これを避けたい場合は関数の中で空のリストを生成します。

まとめ

Pythonにおけるミュータブルとイミュータブルの違いを解説しました。それぞれの性質をきちんと理解することで、意図しない動作を回避できます。


Pythonには
実力を証明できる資格があります

PythonにはPython3エンジニア認定基礎試験という試験があります。

試験範囲がPythonチュートリアル(公式ドキュメント)となっているため、Pythonの基礎を全て押さえることができます。

  • 独学で勉強していて、どれくらい理解できているのか調べたい
  • 今の仕事も続けつつ、キャリアの幅を広げたい
  • 新しい技術としてPythonを習得したい

そんな方は是非詳細をご確認ください。

おすすめ記事
【入門者向け】効率よくPythonを習得する3Step
【難易度爆下げ】Python3エンジニア認定基礎試験 公式問題集レビュー
【Python3エンジニア認定基礎試験】合格体験記からみんなの勉強方法を探ってみた

コメント

タイトルとURLをコピーしました