python 对象和引用


在python当中一切皆对象,我们可以先创建一个对象,并给对象一定的值,这叫做实例化,然后再把此对象可以被其他对象所引用,
列表操作如下:
 
list1 = [1,2,"a","b",[5,6,7]] 
list2 = list1

id(list1)  #比较两个对象的值在内存的id是否一致
140698570735696

id(list2)
140698570735696

 

 
判断两个列表是否相等,注:此处的判断是判断两个列表的值是否相等。
 
list1 == list2
True

 

 
将list1进行修改,然后检查list2的值是否发生修改:
先通过list1的最后一个下标获取其值:
 
list1[4]  #获取下标的值
[5, 6, 7]

list1[4] = [55,66]  #对下标重新赋值

list1
[1, 2, 'a', 'b', [55, 66]]  #检查list1和list2的值是否一致

list2
[1, 2, 'a', 'b', [55, 66]]

list1 == list2  #再次验证是否一致
True

 

 
 
字典下标操作:
通过下标获取value并进行修改:
 
dic1 = {1:2,"a":"b"}
dic1.setdefault(901,[55]) #setdefault,当有此字典的时候不做任何设置,无此字典则进行添加
[55]  #是setdefault的返回值

dic1.fromkeys(range(5),[]) #fromkeys为指定key,并未key指定value从而生成新的字典。
{0: [], 1: [], 2: [], 3: [], 4: []}

c = dic1.fromkeys(range(5),[]) #c实例化dic1方法生成的结果
c[1].append({"B":{}}) #c字典进行修改

c[1][0]["B"]["C"] = "END" #获取到c的下标进行修改

print c #显示c的最最终内容
{0: [{'B': {'C': 'END'}}], 1: [{'B': {'C': 'END'}}], 2: [{'B': {'C': 'END'}}], 3: [{'B': {'C': 'END'}}], 4: [{'B': {'C': 'END'}}]}

print dic1
{'a': 'b', 1: 2, 901: [55], 902: 'x'}

 

字典引用:
 
dic1 = {"k1":"v1","k2":"v2"}  #创建一个字典,实例化的步骤

id(dic1) #查看字典在内存的id
140502614443464

dic2 = dic1  #对dic1进行引用

id(dic2)
140502614443464


dic1["k2"] = "v22"  #通过字典的key修改其相对应的value,这样是在字典原基础上修改,这样不会影响内存id,如果直接改字典是新建一个新的字典并复制给当前字典,内存id会变化
dic1
{'k1': 'v1', 'k2': 'v22'}

dic2    #查看dic1和dic2,发现dic1修改dic2同样进行了修改
{'k1': 'v1', 'k2': 'v22'}

id(dic1)  #
140502614443464

id(dic2)  #再次检查dic1和dic2的内存id并没有变化,因此通过字典的key修改不会影响字典引用和内存id的值
140502614443464

dic1 == dic2  #对比两个字典是否一致
True

 

 
字典key和value的循环方法:
 
对于key和value不是很多的字典,因为本操作会将所要字典全部读取出来并加载到内存最后执行for循环进行遍历找出key和value,速度会慢而且站资源,因此小的字典可以使用简单的for循环,如下:
for k,v in dic1.items():
     print k,"--->",v
执行结果如下:
k2 ---> v22
k1 ---> v1

对于字典比较大的操作,比如几十万上百万行,使用如下方法:
for k in dic1:
    print k,"--->",dic1[k]
执行结果如下:
k2 ---> v22
k1 ---> v1

 

 
 

评论关闭