参照型とそうでない型の違い
まずここに誤解があります。Pythonの変数は、全て参照値を保持します。
というか、変数が直接保持しているのは参照値だけです。
参照値が変更されない限り、全ての変更は呼び出し元に影響します。
Python
1>>> def func(lst):
2... print(id(lst), lst)
3... lst = [1, 2, 3]
4... print(id(lst), lst)
5...
6>>> l = [0, 0, 0]
7>>>
8>>> print(id(l), l)
92497531337096 [0, 0, 0]
10>>>
11>>> func(l)
122497531337096 [0, 0, 0]
132497531335560 [1, 2, 3] # 関数内で参照値が書き換わっているので、
14>>>
15>>> print(id(l), l)
162497531337096 [0, 0, 0] # 呼び出し元に影響しない
Python
1>>> def func(lst):
2... print(id(lst), lst)
3... lst[0] = 42
4... print(id(lst), lst)
5...
6>>> l = [0, 0, 0]
7>>>
8>>> print(id(l), l)
92497531335560 [0, 0, 0]
10>>>
11>>> func(l)
122497531335560 [0, 0, 0]
132497531335560 [42, 0, 0] # 参照値が書き換わらないので、
14>>>
15>>> print(id(l), l)
162497531335560 [42, 0, 0] # 呼び出し元にも影響する
参照値が書き換わるときとは、変数が新たなオブジェクトを指すようになるときです。
この二つのvalは、名前は同じでも全くの別物だと考えた方が良いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。