dict型オブジェクトを内包するlistオブジェクトのコピー
dict型オブジェクトを内包するlistオブジェクトのコピー(代入)をしたくて、当初は以下の通り行っていたが、これだと値ではなく、参照渡しがされてしまってい
るようで、work_driverPathsを変更するとdriverPathsの方にもその結果が反映されてしまった。
self.work_driverPaths = self.driverPaths
そのため、以下の通り copy ライブラリの deepcopy を使用して解決。
self.work_driverPaths = copy.deepcopy(self.driverPaths)
コパイロットぴ◯ょん君の回答
list型とdict型を併用した場合に参照渡しが発生する要因
= で代入するときの動作だね。代入した側のオブジェクトとオリジナルのオブジェクトがリンクすることについて気づいたかな?
実際、= は浅いコピー(shallow copy)を作るだけなので、両方のオブジェクトが同じ参照を共有してしまうんだ。
deepcopyの機能について
- 深いコピー: オリジナルのオブジェクトとそのコピーが完全に独立して動作する。
- 再帰的処理: 内部のネストされたオブジェクトもすべてコピーする。
- 安全性: オリジナルを変更してもコピーには影響がない。
コメント
コメントを投稿