前提・実現したいこと
Sampleクラスを定義して配列に詰め、参照用の配列を元の配列からコピーから作成して、指定の要素を元の配列から削除しようとしています。
発生している問題・エラーメッセージ
deepcopyをしても、要素のアドレスが変更されることで、配列の要素がint型やstr型の時のようなマッチングができない状況です。
オブジェクト型での配列のコピーと参照はどうすればいいのでしょうか。
bash
1$ python3 sample.py 2nums: 3[<__main__.Sample object at 0x1039d3fd0>, <__main__.Sample object at 0x1039d3ee0>, <__main__.Sample object at 0x1039d3e20>, ...] 4nums_copy: 5[<__main__.Sample object at 0x103814550>, <__main__.Sample object at 0x1039db040>, <__main__.Sample object at 0x1039db0d0>, ...] 6 7Traceback (most recent call last): 8 File "/Users/user/Desktop/sample.py", line 25, in <module> 9 nums.remove(nums_copy[j]) 10ValueError: list.remove(x): x not in list
該当のソースコード
python
1import copy 2 3 4class Sample: 5 def __init__(self, num): 6 self.firstnum = num 7 self.secondnum = 2 8 self.theirdnum = 3 9 10 11nums = [] 12for i in range(10): 13 num = Sample(i) 14 nums.append(num) 15 16print('nums:') 17print(nums) 18 19nums_copy = copy.deepcopy(nums) 20print('nums_copy:') 21print(nums_copy) 22 23for j in range(10): 24 if j % 2 == 0: 25 nums.remove(nums_copy[j])
試したこと
Pythonのcopyとdeepcopyについて
といった記事には目を通したのですが、オブジェクト型での配列生成と参照について、解決につながる情報が得られていません。
補足情報(FW/ツールのバージョンなど)
Python 3.9.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。