Python ではすべてのものをオブジェクトとして見ることができます。各オブジェクトには独自の ID、タイプ、値があります。
オブジェクトが変更可能かどうかは、値が変更をサポートしているかどうかによって決まります。
関連する学習の推奨事項: Python ビデオ チュートリアル
不変オブジェクト
一般的な不変オブジェクト (不変)オブジェクト):
例を通して感じてみましょう
例
>>> x=1 >>> y=x >>> id(x)==id(y) True >>> id(1)==id(y) True
ここでは 2 つの int オブジェクトが作成され、x、y が同じオブジェクトを指すようにします。 、そして、x 1
>>>x=x+1
この時点で、x の id 値は、y の id および 1 の id と同じままですか?
>>> x=x+1 >>> id(x)==id(y) False >>> id(x)==id(1) False >>> id(1)==id(y) True
結果から、x が指すオブジェクトが変更されたが、1 は変更されていないことを確認するのは難しくありません。これは不変オブジェクトです。不変オブジェクトの場合、一度作成すると変更することはできません。
注: 不変性は絶対的な不変性と厳密に等価ではありません
>>> a=([1],2,3) >>> id(a) 4338862696 >>> id(a[0]) 4338949128 >>> a[0][0]=0 >>> id(a) 4338862696 >>> id(a[0]) 4338949128
上の例から、a[0] の値を変更したが、その ID には影響しなかったことが簡単にわかります。価値。不変コンテナ オブジェクトに変更可能オブジェクトへの参照が含まれている場合、後者の値が変更されると、前者の値も変更されますが、コンテナの ID 値は変更されないため、コンテナは不変オブジェクトのままです。
# 可変オブジェクト
#共通の可変オブジェクト:Example
>>> c = [1,2,3] >>> b = c >>> id(b)==id(c) True
c[0]=4
>>> id(c)==id(b) True
関数パラメータ
可変オブジェクトと不変オブジェクトの場合オブジェクトの場合、関数がパラメータとして渡されると動作が異なります。例
eg0
def update_list(nums_list): print(f'2 id:{id(nums_list)}') nums_list += [10] print(f'3 id:{id(nums_list)}') number_list = [5, 6] print(f'1:{number_list}, id:{id(number_list)}') update_list(number_list) print(f'4:{number_list}, id:{id(number_list)}')
2 id:4457707912eg13 id:4457707912
別の例を見てみる
4:[5, 6, 10], id:4457707912
3 id:4343768448 ここでの重要なポイントは次のとおりです: 以上がPython の可変オブジェクトと不変オブジェクトの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。def add_num(number):
print(f'2:{id(number)}')
number += 1
print(f'3:{id(number)}')
num = 1
print(f'1:{num}, id:{id(num)}')
add_num(num)
print(f'4:{num}, id:{id(num)}')
2 id:4343768416
4:1, id:4343768416