我正在Python中的列表上做一個for循環,據我所知,應該爲列表中的每個元素創建一個淺表副本。但是,當我對元素執行操作時,更改沒有反映在原始列表中。For循環在python不操縱原始對象,而是執行深度複製
下面的代碼:
interactions = f.readlines()
for interaction in interactions:
orig = interaction
interaction = interaction.replace('.', '').replace(' ', '').strip('\n')
if len(interaction) == 0:
interactions.remove(orig)
print(interactions)
此操作的給定的['. Bph\n', 'Cardiovascular\n', 'Diabetes\n', '. ']
的初始列表的輸出是:
['. Bph\n', 'Cardiovascular\n', 'Diabetes\n', '. ']
['. Bph\n', 'Cardiovascular\n', 'Diabetes\n', '. ']
['. Bph\n', 'Cardiovascular\n', 'Diabetes\n', '. ']
['. Bph\n', 'Cardiovascular\n', 'Diabetes\n']
即使當我按照調試器,我可以看到正在執行正確的操作在interaction
上,但這些更改並未反映在交互中。我在這裏做錯了什麼?
吉姆回答相當完美,但要記住,雖然Python的__does__在分配執行淺拷貝,'str'對象是不可改變的,因此沒有'str'方法將永遠修改對象。 –