为啥局部变量会自我更新? [复制]
Posted
技术标签:
【中文标题】为啥局部变量会自我更新? [复制]【英文标题】:Why a local variable is updating itself? [duplicate]为什么局部变量会自我更新? [复制] 【发布时间】:2019-06-22 15:40:05 【问题描述】:我有以下代码:
file = open('MyCSV.csv') # this read the Headers name
reader = csv.reader(file)
Data = next(reader,None)
Data = Data[1:]
DataTmp = Data
for item in DataM: # DataM is a list with one element from Data
Data.remove(item) #remove one item
#
print(len(Data))
print(len(DataTmp))
所以,我打开MyCSV.csv
文件,读取标题行,并将其存储在变量Data
中。我还通过DataTmp
复制了Data
。最初,列表Data
有10 个元素。
然后,我从Data
中删除了一个元素。
现在,我希望Data
的长度是9
,而DataTmp
的长度仍然是10
。但是,我得到的答案是DataTmp
的长度也是9
。为什么?我从未更改过DataTmp
,我在从Data
中删除元素之前定义了它。
感谢您的帮助!
【问题讨论】:
DataTmp = Data
使它们成为相同的对象。那不会复制。影响一个会影响另一个。
@Carcigenicate 谢谢!现在我明白了。我曾经使用 Matlab 而不是 python,我想这是我学到的第一个“大”差异。
是的,我很确定就在几天前,我从 MATLAB 的其他人那里看到了类似的问题。这似乎是一个常见的混淆点。
【参考方案1】:
重要的变化是
import copy
与
DataTmp = copy.copy(Data) # Use this instead of direct assignment.
代替
DataTmp = Data
使用下面的代码。
import copy
file = open('MyCSV.csv') # this read the Headers name
reader = csv.reader(file)
Data = next(reader,None)
Data = Data[1:]
# DataTmp = Data
DataTmp = copy.copy(Data) # Use this instead of direct assignment.
for item in DataM: # DataM is a list with one element from Data
Data.remove(item) #remove one item
#
print(len(Data))
print(len(DataTmp))
【讨论】:
以上是关于为啥局部变量会自我更新? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥即使使用 setlocal enabledelayedexpansion 也无法访问 for 循环(批处理文件)中的局部变量? [复制]