关于python中for循环的问题?

最近在做数据分析的练习时,对一段python代码中的for循环不是很理解,代码如下:
print('修正数据类型(数据清理)')
importunicodecsv
fromdatetimeimportdatetimeasdt
defread_csv(filename):
withopen(filename,'rb')asf:
reader=unicodecsv.DictReader(f)
returnlist(reader)
defparse_date(date):#将字符串的date转换成python的日期时间对象
ifdate=='':#检查日期是否为空字符串
returnNone
else:
returndt.strptime(date,'%Y-%m-%d')#将字符串解析成日期
daily_engagement=read_csv('daily-engagement.csv')
print(daily_engagement[0])
#清理engagement的数据类型
forengagement_recordindaily_engagement:
engagement_record['utc_date']=parse_date(engagement_record['utc_date'])
print('\n每日参与学生数据:')
print(daily_engagement[0])
结果输出如下:
修正数据类型(数据清理)
OrderedDict([('acct','0'),('utc_date','2015-01-09'),('num_courses_visited','1.0'),('total_minutes_visited','11.6793745'),('lessons_completed','0.0'),('projects_completed','0.0')])
每日参与学生数据:
OrderedDict([('acct','0'),('utc_date',datetime.datetime(2015,1,9,0,0)),('num_courses_visited','1.0'),('total_minutes_visited','11.6793745'),('lessons_completed','0.0'),('projects_completed','0.0')])
在读取了daily-engagement.csv文件后,打印变量daily_engagement[0]时,('utc_date','2015-01-09')中的日期还只是字符串
我的问题是,在对变量daily_engagement进行遍历后,为什么在打印同样的daily_engagement时,里面的utc_date就变成了datetime.datetime(2015,1,9,0,0)?
我在看这个for循环的时候只看出了对变量engagement_record作了修改,看不出有对daily_engagement作赋值之类的操作,但却能够打印修改后的结果
请大神指教个中原理,谢谢!
森栏
浏览 251回答 2
2回答

互换的青春

foriin[v1,v2,v3]:i记录的是变量v*的地址,如果变量是字符串,修改i,v*没有变化,如果变量是列表,那么v1[0]===i[0]他们共用一个地址,#!/usr/bin/python3a=[[1,2],[1,2],[1,2],[1,2],[1,2]]foriina:i[0]=5print(a)

杨魅力

daily_engagement是一个list,保留了对每一个engagement_record的引用。前后两次engagement_record[0]取得都是同一个engagement_record,是这个engagement_record中的一个字段被改变了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript