您的位置:首页 > 编程语言 > Python开发

python基础一

2015-11-24 17:43 567 查看
关于内存分配问题

新定义字符串变量默认新开辟一块新的内存空间

其它类似有索引如列表,元组或是字典赋值时其实只是把变量名指向同一地址空间而已,如下所示

##字符串新定义则开辟新的一块内存空间
>>> str1 = 'hoho'
>>> str2 = str1
>>> id(str1),id(str2) #查看内存对象地址,观察内存地址,即str2新开辟了内存空间
(140297199501752, 140297199501752) #这里看到是一样的是由于python的一个内部机制导致的,如果字符串足够大的话就会是不一样的,不用纠结
>>> str2 = 'heihei'
>>> str1
'hoho'
>>> str2
'heihei'
>>> id(str1),id(str2) #看,内存地址是不是变了
(140297199501752, 140297214622552) 

##非字符器,如列表,元组,字典赋值定义后其实只是把新的变量名(可以理解为标签)指向同一内存地址,以字典为例,如下所示
>>> dic1 = {'name':'hoho'}
>>> dic2 = dic1
>>> id(dic1),id(dic2)
(140297199190088, 140297199190088)
>>> dic1 = {'name':'hoho'}
>>> dic2 = dic1
>>> id(dic1),id(dic2) #查看内存对象地址,发现是一样的,故修改dic2事实上dic1也跟着修改了
(140297199191752, 140297199191752)
>>> dic2['name'] = 'heihei'
>>> dic2
{'name': 'heihei'}
>>> dic1
{'name': 'heihei'}


列表,元组及字典的复制问题(浅复制与深复制 copy模块的使用)

1、列表及元组可使用切片实现浅复制,也可使用 copy模块使用浅复制(包括字典)

2、使用copy.deepcopy() 实例深复制

>>> import copy
>>> list1 = [1,2]
>>> list2 = list1
>>> list2[0] = 2 #list2改了,list1跟着变了
>>> list1
[2, 2]
>>> list3 = list1[:] #浅复杂,利用数组切片做浅复制
>>> list3 = copy.copy(list1)
>>> id(list1),id(list2),id(list3) #这里就可看到地址空间是不一样的
(140297199250696, 140297199250696, 140297199247560)
>>>
>>> list4 = [1,[2]] ##复杂结构必须用深复制
>>> list5 = list4[:]
>>> list5
[1, [2]]
>>> list5[1][0] = 6
>>> list4
[1, [6]]     #从这里可以看到内层的列表事实是没复制的,list4也跟着变了
>>> list6 = copy.deepcopy(list4) #这里使用深复制
>>> list6[1][0] = 8
>>> list6
[1, [8]]
>>> list4
[1, [6]] #这里就可以看出已经复制的了


常用内置函数

python内置函数是非常多的,记住常用的就行了,但会知道怎么查看有哪些内置函数,函数的帮助

正常情况下分3步走

type(变量) ---> 得到变量的所属类

dir(类名) --->查看类下都有哪些方法,其中类似 __abs__ 以双下划线开头的一般都有替代的方法 如: __abs__ <=> abs()

help(类名或函数名) --->查看类下函数用法或是直接查看函数用法

整形

>>> dic1 = {'key1' : 'a','key2' : 'b'}
>>> dic1.get('key1') #取字典值,没取到默认返回None,也可指定
'a'
>>> dic1.get('key3')
>>> dic1.items()
dict_items([('key2', 'b'), ('key1', 'a')]) #返回元组列表
>>> list(dic1.items())
[('key2', 'b'), ('key1', 'a')]
>>> dic1.keys() #返回keys列表
dict_keys(['key2', 'key1'])
>>> dic1.values()       #返回值列表
dict_values(['b', 'a'])
>>> dic2 = dic1.copy() #浅复制
>>> dic2
{'key2': 'b', 'key1': 'a'}
>>> dic1['key3'] = 'c' #赋值(修改)
>>> dic1
{'key2': 'b', 'key1': 'a', 'key3': 'c'}
>>> dic1.pop('key1') #删除指定的key
'a'
>>> dic1
{'key2': 'b', 'key3': 'c'}
>>> dic1.get('key1','a') #取值,没有返回'a'
'a'
>>> dic1
{'key2': 'b', 'key3': 'c'}
>>> dic1.setdefault('key1','a') #设置默认(貌似没什么用)
'a'
>>> dic1
{'key2': 'b', 'key1': 'a', 'key3': 'c'}
>>> dic3 = {'name':'update'}
>>> dic1.update(dic3) #更新
>>> dic1 
{'key2': 'b', 'name': 'update', 'key1': 'a', 'key3': 'c'}
>>> del dic3 #删除
>>> dic1
{'key2': 'b', 'name': 'update', 'key1': 'a', 'key3': 'c'}
>>> len(dic1) #长度
4


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: