mutable & immutable


python変数mutableとimmutableの違い


へんすう


変数はオブジェクトを指します.
hundred = 100
ある場合は、コンピュータメモリに100の値が格納され、100は100のメモリが格納されている場所を示します.すなわち、100という整数型オブジェクトは、100という変数によって指向される.
可変と不可変の両方が変数に値を割り当てると、変数にオブジェクトを割り当てるときに使用する変数のアドレス値に参照値が割り当てられます.逆に、値の変更時に可変オブジェクトを割り当てる変数は元のオブジェクトの継承を維持し、不変オブジェクトの継承を割り当てる変数は変更オブジェクトに新しい継承を割り当てます.

mutable, immutable


可変表示値は変化しますが、不変表示値は変化しません.
異なる資料タイプには異なる特徴があり、可変と不変の違いを理解する必要がある.オブジェクトを変更するかどうかで、Pythonではオブジェクトに関連する操作方法が変化します.
簡単に言えば、可変は変更可能なオブジェクトであり、不変は変更不可能なオブジェクトである.
以下の表は新雨のブログでまとめられたもので、使用する資料型とMutable、可変対象を示しています.

火線が提供する資料型を除いて、火線プレイヤーが自分で作ったクラスは基本的に可変です.
各資料型には可変と不変の区別と運営方式をよくまとめたブログがあるので、このブログの資料をさらに整理しました.原本はこちらです.可変と不可変の区別

  • 整数、浮動小数点などの数値:可変


  • string(文字列):可変


  • list : mutable


  • tuple :mutable


  • dictionary : mutable

  • 追加


    リストの[:]またはdeepcopy関数を使用すると、同じオブジェクトの共有を回避できます.
    #copy 모듈 import
    import copy
    
    #리스트
    x = [1, 2, 3]
    
    #x 변수가 저장하고 있는 주소값 대입
    y = x
    
    #x와 z가 같은 객체를 공유하지 않도록 설정. (리스트만 해당 기능 가능)
    z = x[:]
    
    # deepcopy를 사용하면 x와 deepcody된 변수가 같은 객체를 공유하지 않는다.
    dcpy = copy.deepcopy(x)
    
    #확인 방법
    print id(x)
    print id(y)
    print id(z)
    print id (dcpy)
    idは、出力オブジェクトの一意の参照の関数です.
    このIDにより、listが変更された場合、変数が同じオブジェクトを参照するかどうかを決定できます.

    整理する


    immutableとmutableのプロパティは、変数が関数のパラメータとして渡されると、元の入力変数の値が変更されるかどうかを決定します.
    これはcall-by-value、call-by-referenceと同じ概念です.