Pythonプログラミングを始めたてのころ、破壊的メソッドと非破壊的メソッドについて理解できておらず、
変数を意図せず変更してしまい、思わぬバグを引き起こしたことを思い出したので、簡単にまとめました。
概要
破壊的メソッドとは
オブジェクト(変数)の状態を直接変更するメソッドのこと。
メソッドを呼び出した後、元のオブジェクト(変数)が変更されるメソッドを破壊的メソッドと言います。
例えば、リストのappend()メソッドはリストに要素を追加し、元のリストを変更するため、破壊的メソッドに該当します。
非破壊的メソッドとは
メソッドを呼び出した後、元のオブジェクト(変数)の状態を変更せず、新しいオブジェクトを返すメソッドを非破壊的メソッドと言います。
例えば、リストのsorted()メソッドは新しいソート済のリストを返すため、元のリストは変更されないため、非破壊的メソッドに該当します。
使用例
使用頻度の高い破壊的メソッドの例
①list.append(x)
用途:リストの末尾に要素xを追加する
入力
list = [1, 2, 3]
list.append(4)
print(list)
出力: [1, 2, 3, 4]
②list.extend(iterable)
リストに他のイテラブル(リスト、タプル等)の要素を追加する
入力
list = [1, 2, 3]
list.extend([4, 5])
print(list)
出力: [1, 2, 3, 4, 5]
③list.insert(i, x)
用途:指定した位置に要素xを挿入する
入力
list = [1, 2, 3]
list.insert(1, 4)
print(list)
出力: [1, 4, 2, 3]
④list.remove(x)
用途:リストから最初に見つかった要素xを削除する
入力
list = [1, 2, 3, 2]
list.remove(2)
print(list)
出力: [1, 3, 2]
⑤list.pop([i])
用途:指定した位置iの要素を削除し、その要素を返す
位置iを指定しない場合は末尾の要素を削除して返す
入力
list = [1, 2, 3]
popped_element = list.pop()
print(list)
print(popped_element)
出力
list: [1, 2]
popped_element: 3
使用頻度の高い非破壊的メソッドの例
①sorted(iterable)
用途:イテラブルの要素をソートした新しいリストを返す
入力
list = [3, 1, 2]
sorted_list = sorted(my_list)
print(my_list)
print(sorted_list)
出力
list: [3, 1, 2]
sorted_list: [1, 2, 3]
②reversed(iterable)
用途:イテラブルの要素を逆順にした新しいイテラブルを返す
入力
list = [1, 2, 3]
reversed_list = list(reversed(list))
print(list)
print(reversed_list)
出力
list: [1, 2, 3]
reversed_list: [3, 2, 1]
③str.replace(old, new)
用途:文字列内の指定した部分文字列oldをnewに置換した新しい文字列を返す
入力
string = "hello world"
new_string = string.replace("world", "Python")
print(string)
print(new_string)
出力
string: hello world
new_string: hello Python
④str.upper()
用途:文字列を全て大文字に変換した新しい文字列を返す
入力
string = "hello"
uppper_string = string.upper()
print(string)
print(upper_string)
出力
string: hello
upper_string: HELLO
⑤str.lower()
用途:文字列全てを小文字に変換した新しい文字列を返す
入力
string = "HELLO"
lower_string = string.lower()
print(string)
print(lower_string)
出力
string: HELLO
lower_string: hello
コメント