【问题标题】: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 的其他人那里看到了类似的问题。这似乎是一个常见的混淆点。

标签: python list variables


【解决方案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))

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 2014-01-15
    • 2021-06-20
    • 1970-01-01
    • 2015-11-04
    • 2019-08-15
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多