Python数据存储

Computer Components

一个计算机必须能做4件事:

  1. 接受输入
  2. 产生输出
  3. 存储数据
  4. 执行计算

Data Storage

程序中的变量存放在内存中,可以快速的进行访问,而像数据文件这样的数据一般很大存放在硬盘中,访问速度很慢。下面显示的是内存中的存储情况,一个格子是一个byte,发现短整型数据占一个byte,strings的每一个字符占一个byte。利用id(my_var)可以获取到该变量的内存地址。

Python数据存储_第1张图片

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
'''

Low-Level And High-Level Programming Languages

前面提到的一个短整型数据占一个byte,一个字符串的每一个字符占一个内存,这是针对低级编程语言,比如C,它与内存的显示的进行交互,当可以直接申请一个长度的byte给一个变量,这样对计算机系统抽象化不够好。而Python这样的高级编程语言,它能够快速轻松的表达逻辑,那么这种方便也带来了一些代价,就是内存的利用率没有C的高,Python的strings和interger都存储为str何int类的对象。

低级程序语言有精确的内存管理以及在机器级别的优化。高级编程语言对于做任务来说很方便,因为他不需要知道内部优化,因为没有内存的限制。对于很多任务来说,内存并不是最需要关心的事情,高级编程语言需要最大限度地提高开发人员的生产力。

  • 比如下面这个字符串翻转的功能:
    这里写图片描述
    Python数据存储_第2张图片

很明显,python的代码更为简单,而C首先代码很长,其次还需要预先获取一个内来确保这个内存大小合适,而在高级语言中是不需要关心这个问题的。

Data Storage In Python

  • 在Python中可以利用sys包中的getsizeof()这个函数来获取一个变量占据了多少个byte:
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
'''

-

Integers And Strings In Memory

  • 在上一个例子中我们看到10和100000所占的内存相同,表示整型数据站的内存相同,除非这个非常非常的大,才需要更多的内存。 一个整型数据占据28个byte,一个字符占一个byte.

Disk Storage

f = open("list.csv", "r")
list = list(csv.reader(f))
  • 像上面这样的list.csv一般是存储在硬盘上的,需要利用open和csv.reader将其从硬盘中读入到内存中,我们可以利用time模块中的time.clock()这个函数来获取处理器当前时间,通过时间差得到硬盘文件处理的时间。下面这段代码比较了内存和硬盘对数据的处理时间:
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
'''

你可能感兴趣的:(Python数据存储)