|
|
发表于 2017-11-1 09:38:25
|
显示全部楼层
问题一:
可以直接作用于for循环的对象统称为可迭代对象(Iterable)。
可以被内置函数next()调用并不断返回下一个值的对象称为迭代器(Iterator)。
所有的Iterable均可以通过内置函数iter()来转变为Iterator。
以str为例
- >>> i = iter('nihao')
- >>> type(i)
- <class 'str_iterator'>
- >>> next(i)
- 'n'
- >>> next(i)
- 'i'
- >>> next(i)
- 'h'
- >>> next(i)
- 'a'
- >>> next(i)
- 'o'
复制代码
问题二:
for循环只不过是一个语句,用来遍历iterable/itertor中的数据
问题三:
在遍历的时候使用remove等删除方法删除元素的时候,是直接在内存上删除
- >>> a = [1,2,3]
- >>> b = a
- >>> id(a)
- 2333155435528
- >>> id(b)
- 2333155435528
复制代码
这种赋值,是两个变量名a、b同时引用了内存中的1,2,3,指向的是一个地方,删除a中的某一个元素时,b中也会自动删除
- >>> a.remove(a[1])
- >>> a
- [1, 3]
- >>> b
- [1, 3]
- >>>
复制代码
拷贝则不同,拷贝的时候是直接在内存中进行拷贝一份,两个变量指向了不同的地方,引用的不是同一处的数据
- >>> import copy
- >>> a
- [1, 3]
- >>> b
- [1, 3]
- >>> c = copy.copy(a)
- >>> c
- [1, 3]
- >>> id(c)
- 2333178881544
- >>> id(a)#此时变量a、c的地址不相同
- 2333155435528
- >>> id(b)
- 2333155435528
- >>>
复制代码
- >>> a
- [1, 3]
- >>> c
- [1, 3]
- >>> a.remove(a[0])
- >>> a
- [3]
- >>> c
- [1, 3]
- >>> b
- [3]
- >>>
复制代码
|
|