第一章:基本语法
Range 和 xrange 的区别
两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成
器,前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开
辟内存空间,所以当列表很长时,使用 xrange 性能要比 range 好。
字典是可变对象,所以对字典进行操作时,如果是传参,放进去的是引用的话,那么相当
于浅拷贝,实际上所有的值都会变成最后一个数的。
4g 内存怎么读取一个 5g 的数据:
方法一:可以通过生成器,分多次读取每次读取数量相对较少的数据进行处理,依次读取。
方法二:可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比
较高。可以按行数
内存只有 4G 无法一次性读取 10g 的文件,分批读入,分批读入数据要记录每次读入数据
的位置。分批每次读入数据的大小,太小就会在读取操作上花费过多时间。
Readlines()
返回 yield
Read 读取整个文件
Readline 读取下一行,使用生成器方法
Readlines 读取整个文件到一个迭代器以供我们遍历
Except 中 return 后会执行 nally 中的代码,
Raise 可以抛出自定义异常
python 有自动回收垃圾的机制
多个引用指向一个对象的时候,有一个计数器维护着这个对象的内存地址,删除一个应用
则删除一个指向对象的连接,计数器减 1,直到计数器减到 0 的时候。则 python 的垃圾
回收机制会自动的将内存地址回收,此时会调用__del__()
对象赋值就是简单的对象引用,赋值操作不会开辟新的内存空间,他只是复制了对象的引
用。也就是说了出了 b 这个名字以外,没有其他的内存开销。
浅拷贝拷贝了指向原对象的引用,也会创建新对象,其实修改 b 是不会影响到列表 a 的,
a[3].append(‘java’) 就影响了,append 操作是能影响到浅拷贝的,拷贝的对象也会发
生变化的,修改了嵌套的 list,修改外层元素,会修改它的应用。
深拷贝则是拷贝了对象的所有元素,包括了多层嵌套的元素。两者不会产生影响,因为拷
贝出来的是一个全新的对象。与原来的对象没有关联。
导入 copy 模块,deepcopy()是深拷贝,所以 id(c)和 id (e)的地址不一样 ,
copy()则是视拷贝数据类型不同而变,如果拷贝的是不可变数据类型,比如元组,那么
拷贝就是内存地址的链接,很好理解,因为不可变数据类型本身就是不能更改的,拷贝内