概要
「Head First Python 第2版」を進めていった中で考えたことの記録です。
Head First Python 第2版 ―頭とからだで覚えるPythonの基本
- 作者:Paul Barry
- 発売日: 2018/03/24
- メディア: 単行本(ソフトカバー)
「破壊的処理・非破壊的処理」に関する記述は、以下の記事にもあります。
非破壊的処理の例
def double(arg): print('実行前:', arg) print('実行前のオブジェクトID:', id(arg)) arg = arg * 2 print('実行後:', arg) print('実行後のオブジェクトID:', id(arg)) numbers = [ 42, 256, 16 ] double(numbers) # => 実行前: [42, 256, 16] # => 実行前のオブジェクトID: 2133283073344 # => 実行後: [42, 256, 16, 42, 256, 16] # => 実行後のオブジェクトID: 2133315161536
↑上述コードの特徴は以下。
- 実行前と実行後でオブジェクトIDが異なる
[42, 256, 16, 42, 256, 16]
というオブジェクトは、*
演算を実行した際に新たに生成されたものである
*
演算子による演算処理は非破壊的処理である- 元の
[42, 256, 16]
というオブジェクトそのものを書き換えるものではない
- 元の
破壊的処理の例
def change(arg): print('実行前:', arg) print('実行前:', id(arg)) arg.append('さらなるデータ') print('実行後:', arg) print('実行後のオブジェクトID:', id(arg)) numbers = [ 42, 256, 16 ] change(numbers) # => 実行前: [42, 256, 16] # => 実行前: 2133283073344 # => 実行後: [42, 256, 16, 'さらなるデータ'] # => 実行後のオブジェクトID: 2133283073344
- 実行前と実行後でオブジェクトIDが同じ
[42, 256, 16, 'さらなるデータ']
というオブジェクトは、元の[42, 256, 16]
というオブジェクトが上書きされたものである
- リストの
append()
メソッドによる処理は破壊的処理である- 元の
[42, 256, 16]
というオブジェクトそのものを書き換える
- 元の