##Pythonのデータ型について理解を深める
今回データ型について学んだので記事にしたいと思いました。
(既に先人の方々の記事が沢山あるけどアウトプットを兼ねて)
##Pythonのデータ型(オブジェクト)における各データ型利用時の注意点
まずPythonには、Mutableな型とImmutableな型がある。
どういうことかというと。。。まずは意味から。
Immutable => 不変なデータ(Pythonではオブジェクト)
Mutable => 可変なデータ(Pythonではオブジェクト)
##Ex.
[Immutable]
tmp_str="JoJo"
tmp_str[3]="i"
#TypeError: 'str' object does not support item assignment
tmp_tuple=("Dominator","Paralyzer")
tmp_tuple[1]="Eliminator"
# TypeError: 'tuple' object does not support item assignment
[Mutable]
tmp_list=["Dominator","Paralyzer"]
tmp_list[1]=["Eliminator"]
※Mutableな型は関数の引数としてデフォルト定義すると、参照渡しになるので注意が必要
##Pythonのデータ型(Standard)には何がある??
Type | Mutable | Immutable |
---|---|---|
String | ○ | |
Int | ○ | |
Tuple | ○ | |
List | ○ | |
Dict | ○ | |
Set | ○ | |
Boolean | ○ | |
##色々試してみた
# Mutable objects can be put in Immutable object
tmp_list = ['Ichinokata','Ninokata']
tmp_tuple = ('Mizunokokyu',tmp_list)
# OK
tmp_tuple[1].append('Sannokata')
# NG
tmp_tuple[0]='Zenshuuchunokokyu'
# List comprehension
tmp_kokyu_list = list(tmp_tuple)
kokyu_list=[tmp_kokyu_list[i] for i in range(0,len(tmp_kokyu_list))]
# Target dictionary data
persons={
0: {
"name":"Rouis lit",
"age":41,
"Position":"Corporate Attorney",
},
1: {
"name":"Harvey Spector",
"age":41,
"Position":"Assistant District Attorney",
},
2: {
"name":"Rachel Zane",
"age":33,
"Position":"Corporate Attorney",
},
3: {
"name":"Mike Ross",
"age":37,
"Position":"Junior Partner",
},
}
persons_list_length=len(persons)
base_index=0
def swap_value(data, index, index_plus_one):
swap = data[index]
data[index] = data[index_plus_one]
data[index_plus_one] = swap
# Pass by reference and sort data (Just test)
for i in range(base_index,persons_list_length-1):
for j in range(base_index,persons_list_length-i-1):
if persons[j]["age"] > persons[j+1]["age"]:
swap_value(persons, j, j+1)
print(persons)
# If persons type is "list"
# Just call below and you'll see same result
persons.sort(key=lambda x: x['age'])
##ひとまずまとめ
・データ型を学ぶだけでも沢山の知見を得られる
・公式のリファレンスはちゃんと読む
・関数の仮引数にMutableな型を指定すると参照渡しになるので注意する
参照渡しそれ自体はありません。
・Pythonには便利な機能が沢山
*個人的には、ImmutableとかMutableは新しい概念だったので内部的にどのようにメモリ/アドレス確保したり書き込みをできなくしているのか気になった