问题:我想知道for循环中的变量是临时变量吗?或者更改变量也会改变数据。由于在编写下面的代码并在for循环中对'ele'进行更改后,正在更改'data'中的列表。
for ele in data[1:]:
birthday = ele[2]
try:
birthday = birthday.split('-')
birth_year = birthday[0]
birth_year = int(birth_year)
except:
birth_year = 0
ele.append(birth_year)
print(data)
数据:
[['last_name', 'first_name', 'birthday', 'gender', 'type', 'state', 'party'],
['Bassett', 'Richard', '1745-04-02', 'M', 'sen', 'DE', 'Anti-Administration'],
['Bland', 'Theodorick', '1742-03-21', '', 'rep', 'VA', ''],
['Burke', 'Aedanus', '1743-06-16', '', 'rep', 'SC', ''],
['Carroll', 'Daniel', '1730-07-22', 'M', 'rep', 'MD', ''],
['Clymer', 'George', '1739-03-16', 'M', 'rep', 'PA', ''],
['Contee', 'Benjamin', '', 'M', 'rep', 'MD', ''],
['Dalton', 'Tristram', '1738-05-28', '', 'sen', 'MA', 'Pro-Administration'],
['Elmer', 'Jonathan', '1745-11-29', 'M', 'sen', 'NJ', 'Pro-Administration'],
['Few', 'William', '1748-06-08', 'M', 'sen', 'GA', 'Anti-Administration']]
答案 0 :(得分:0)
python中的for ... in ...
循环完全按函数处理变量。
如果您迭代的每个元素都是一个不可变的变量,例如str
或int
或float
。它们只能通过重新分配进行更改,因此原始列表中的任何内容都不会更改。
example = [1, 2, 3, 4]
for element in example:
# We are not changing the element, just reassigning it
element = 0
print(example)
#: [1, 2, 3, 4]
如果元素是list
或dict
或class
等类型,则对其进行更改会更改项目。
example = [[1, 2, 3], [11, 22, 33]]
for element in example:
# The element is just a reference to the item inside the list
# not a copy. Changing it changes the list
element[0] = 0
element.append(9001)
print(example)
#: [[0, 2, 3, 9001], [0, 22, 33, 9001]]
但是,如果我只是重新分配该元素,则没有任何改变。
example = [[1, 2, 3], [11, 22, 33]]
for element in example:
# Again, we are not changing the element, just reassigning it
element = 0
print(example)
#: [[1, 2, 3], [11, 22, 33]]
基本上,如果您正在进行任务(几乎任何使用=
运算符来分配值),您将不会更改原始列表。
如果您正在执行其他任何操作(例如,调用更改.append()
或更改索引或键的元素的函数),则需要修改原始文件。
我建议您阅读一些问题的一些答案:Python functions call by reference。它与你的完全不一样,但行为是一样的。