代入は「変数名 = オブジェクト」という形です。
オブジェクトは、ID と型と値を持っています。
代入によって、オブジェクトの ID が変数に保存されると考えると分かりやすいでしょう。
オブジェクトは、定数であったり、変数であったり、演算結果だったりします。
次のコードを見てどう思いますか?
Python
1print(id(123), type(123), 123)
2print(id('abc'), type('abc'), 'abc')
3a = 123; print(id(a), type(a), a)
4a = 'abc'; print(id(a), type(a), a)
5a = 3.14; print(id(a), type(a), a)
6a = [1,2,3]; print(id(a), type(a), a)
7a = {'a':1, 'b':2, 'c':3}; print(id(a), type(a), a)
8a = 100 + 23; print(id(a), type(a), a)
9a = 'ab' + 'c'; print(id(a), type(a), a)
10a = [1,2] + [3]; print(id(a), type(a), a)
11a = len; print(id(a), type(a), a)
12a = int; print(id(a), type(a), a)
13a = str; print(id(a), type(a), a)
14a = list; print(id(a), type(a), a)
15a = dict; print(id(a), type(a), a)
16a = range; print(id(a), type(a), a)
実行結果
text
19760128 <class 'int'> 123
2140048904384304 <class 'str'> abc
39760128 <class 'int'> 123
4140048904384304 <class 'str'> abc
5140048904641200 <class 'float'> 3.14
6140048903040832 <class 'list'> [1, 2, 3]
7140048904419712 <class 'dict'> {'a': 1, 'b': 2, 'c': 3}
89760128 <class 'int'> 123
9140048904384304 <class 'str'> abc
10140048903040704 <class 'list'> [1, 2, 3]
11140048904812960 <class 'builtin_function_or_method'> <built-in function len>
129450080 <class 'type'> <class 'int'>
139451200 <class 'type'> <class 'str'>
149426528 <class 'type'> <class 'list'>
159453344 <class 'type'> <class 'dict'>
169414144 <class 'type'> <class 'range'>
int や str の演算結果は同じ値のオブジェクトと同じ ID ですが、
リストの演算結果は、同じ値でも ID の異なる別のオブジェクトになっています。