数据类型
一、数字(int)
Python可以处理任意大小的正负整数,但是实际中跟我们计算机的内存有关,在32位机器上,整数的位数为32位,取值范围为 -2**31~2**31-1,在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1。对于int类型,需要掌握的方法不多,看 下面的几个例子:
1 2 3 4 5 6 |
|
二、字符串(str)
字符串的常用功能太多了,这里我例举几种常见的功能,具体请看下面的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
三、列表(list)
列表是Python内置的一种数据类型是列表,是一种有序的集合,可以随时添加和删除其中的元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
l.insert(4,6) #在下标为4的位置,插入值6
|
四、元组(tuple)
tuple和list非常类似,但是tuple一旦初始化就不能修改,tuple也是有序的,tuple使用的是小括号标识。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
五、字典(dict)
字典是无序的,使用键-值(key-value)存储,具有极快的查找速度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
补充
一 、enumrate
为一个可迭代的对象添加序号,可迭代的对象你可以理解成能用for循环的就是可迭代的。默认是编号是从0开始,可以设置从1开始
1 2 3 4 5 6 7 |
|
二、range和xrange
在python2中有xrange和range,其中range会一次在内存中开辟出了所需的所有资源,而xrange则是在for循环中循环 一次则开辟一次所需的内存,而在Python3中没有xrange,只有range ,但是python3的range代表的就是xrange。range用来指定范围,生成指定的数字。
1 2 3 4 5 |
|
三、深浅copy
为什么要拷贝?
1 |
|
数字字符串 和 集合 在修改时的差异?(深浅拷贝不同的终极原因)
1 2 3 |
|
对于集合,如何保留其修改前和修改后的数据?
1 |
|
对于集合,如何拷贝其n层元素同时拷贝?
1 |
|
1 浅copy 2 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]} 3 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]} 4 >>> dict2 = dict.copy() 5 6 7 >>> dict["g"][0] = "shuaige" #第一次我修改的是第二层的数据 8 >>> print dict 9 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 10 >>> print dict2 11 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 12 >>> id(dict["g"][0]),id(dict2["g"][0]) 13 (140422980581296, 140422980581296) #从这里可以看出第二层他们是用的内存地址 14 >>> 15 16 17 >>> dict["a"] = "dashuaige" #注意第二次这里修改的是第一层 18 >>> print dict 19 {‘a‘: ‘dashuaige‘, ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘:[‘shuaige‘,‘grapefruit‘]}‘g‘: [‘shuaige‘, ‘grapefruit‘]}‘g‘: [‘shuaige‘, ‘grapefruit‘]}‘g‘: [‘shuaige‘, ‘grapefruit‘]}20 >>> print dict2 21 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 22 >>> 23 >>> id(dict["a"]),id(dict2["a"]) 24 (140422980580816, 140422980552272) #从这里看到第一层他们修改后就不会是相同的内存地址了! 25 >>> 26 27 28 #这里看下,第一次我修改了dict的第二层的数据,dict2也跟着改变了,但是我第二次我修改了dict第一层的数据dict2没有修改。 29 说明:浅copy只是第一层是独立的,其他层面是公用的!作用节省内存 30 31 深copy 32 33 >>> import copy #深copy需要导入模块 34 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]} 35 >>> dict2 = copy.deepcopy(dict) 36 >>> print dict 37 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 38 >>> print dict2 39 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 40 >>> dict["g"][0] = "shuaige" #修改第二层数据 41 >>> print dict
42 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 43 >>> print dict2 44 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 45 >>> id(dict["g"][0]),id(dict2["g"][0]) 46 (140422980580816, 140422980580288) #从这里看到第二个数据现在也不是公用了 47 48 # 通过这里可以看出他们现在是一个完全独立的,当你修改dict时dict2是不会改变的因为是两个独立的字典!
‘g‘: [‘shuaige‘, ‘grapefruit‘]} 20 >>> print dict2 21 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 22 >>> 23 >>> id(dict["a"]),id(dict2["a"]) 24 (140422980580816, 140422980552272) #从这里看到第一层他们修改后就不会是相同的内存地址了! 25 >>> 26 27 28 #这里看下,第一次我修改了dict的第二层的数据,dict2也跟着改变了,但是我第二次我修改了dict第一层的数据dict2没有修改。 29 说明:浅copy只是第一层是独立的,其他层面是公用的!作用节省内存 30 31 深copy 32 33 >>> import copy #深copy需要导入模块 34 >>> dict = {"a":("apple",),"bo":{"b":"banna","o":"orange"},"g":["grape","grapefruit"]} 35 >>> dict2 = copy.deepcopy(dict) 36 >>> print dict 37 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 38 >>> print dict2 39 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 40 >>> dict["g"][0] = "shuaige" #修改第二层数据 41 >>> print dict 42 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘shuaige‘, ‘grapefruit‘]} 43 >>> print dict2 44 {‘a‘: (‘apple‘,), ‘bo‘: {‘b‘: ‘banna‘, ‘o‘: ‘orange‘}, ‘g‘: [‘grape‘, ‘grapefruit‘]} 45 >>> id(dict["g"][0]),id(dict2["g"][0]) 46 (140422980580816, 140422980580288) #从这里看到第二个数据现在也不是公用了 47 48 # 通过这里可以看出他们现在是一个完全独立的,当你修改dict时dict2是不会改变的因为是两个独立的字典!