一个计算机必须能做4件事:
程序中的变量存放在内存中,可以快速的进行访问,而像数据文件这样的数据一般很大存放在硬盘中,访问速度很慢。下面显示的是内存中的存储情况,一个格子是一个byte,发现短整型数据占一个byte,strings的每一个字符占一个byte。利用id(my_var)可以获取到该变量的内存地址。
my_int = 10 int_addr = id(my_int) my_str = "Hello World"
str_addr = id(my_str)
print(int_addr) print(str_addr)
'''
10106112
139965952532272
'''
前面提到的一个短整型数据占一个byte,一个字符串的每一个字符占一个内存,这是针对低级编程语言,比如C,它与内存的显示的进行交互,当可以直接申请一个长度的byte给一个变量,这样对计算机系统抽象化不够好。而Python这样的高级编程语言,它能够快速轻松的表达逻辑,那么这种方便也带来了一些代价,就是内存的利用率没有C的高,Python的strings和interger都存储为str何int类的对象。
低级程序语言有精确的内存管理以及在机器级别的优化。高级编程语言对于做任务来说很方便,因为他不需要知道内部优化,因为没有内存的限制。对于很多任务来说,内存并不是最需要关心的事情,高级编程语言需要最大限度地提高开发人员的生产力。
很明显,python的代码更为简单,而C首先代码很长,其次还需要预先获取一个内来确保这个内存大小合适,而在高级语言中是不需要关心这个问题的。
import sys
my_int = 200 size_of_my_int = sys.getsizeof(my_int) print(size_of_my_int)
int1 = 10
int2 = 100000
str1 = "Hello"
str2 = "Hi"
int_diff = sys.getsizeof(int1) - sys.getsizeof(int2) print(int_diff)
str_diff = sys.getsizeof(str1) - sys.getsizeof(str2) print(str_diff)
'''
28
0
3
'''
-
f = open("list.csv", "r")
list = list(csv.reader(f))
import time
import csv
before_file_read = time.clock()
f = open("list.csv", "r")
list_from_file = list(csv.reader(f))
after_file_read = time.clock()
file_time = after_file_read - before_file_read print(file_time)
before_string_parse = time.clock()
list_from_string = "1,2,3,4,5,6,7,8,9,10".split(",")
after_string_parse = time.clock()
RAM_time = after_string_parse - before_string_parse print(RAM_time)
'''
0.00018099999999998673
4.700000000013027e-05
'''