pythonのメゾッドの整合性について
こんばんは。
pythonを勉強し始めましたが理解できない部分があって質問させて頂きます。
プログラム、特にオブジェクト指向をまだよく理解していないのである程度初心者向けの回答をお願いします。
pythonにおいて文字列はオブジェクトであり、
>>> strA = "python"
>>> print (strA)
python
>>> print (strA.upper())
PYTHON
>>> print (strA)
python
のように使われるメゾッドが存在しています。
これはオブジェクト自体を変化させるのではなく、今回の場合ではオブジェクトがupper()されたオブジェクトを返しています(まちがっていませんよね?)。
そのため、strA自体を変化させるには
>>> strA = strA.upper()
>>> print (strA)
PYTHON
のようにする必要があると理解していました。
ここで新しいオブジェクトlistを用いた時
>>> tl = ['A','B','C','D','E','F']
>>> print (tl)
['A', 'B', 'C', 'D', 'E', 'F']
>>> print(tl.reverse())
None
>>> print(tl)
['F', 'E', 'D', 'C', 'B', 'A']
>>> listA.reverse()
となります。文字列から類推すると
>>>tl = ['A','B','C','D','E','F']
>>>print (tl.reserve())
['F', 'E', 'D', 'C', 'B', 'A']
>>>print(tl)
['A','B','C','D','E','F']
>>>tl =tl.reserve()
>>>print (tl)
['F', 'E', 'D', 'C', 'B', 'A']
のような振る舞い方を行うのが"正しい"と思うのですがなぜ違うのでしょうか?