Python起手式(类型和对象)

一. 对象的身份和类型

  1. 内置函数 id() 可以返回一个对象的唯一标识,返回值为整型,用于比较该对象在内存中的位置,在Python中,一切都是对象,比如创建一个值为1的对象,a只是引用这个新创将对象的一个名称,将a赋值给b时,b就成了同一对象的另一个名称,a和b的唯一标识都是相同的,使用sys模块的getrefcount可以获取引用计数,改变a并不会影响到b。

import sys
a=1
b=1  #或者使用del 删除对象
print(id(a))
print(id(b)) #删除了对象将引发异常
print(sys.getrefcount(a))
b=2
print(sys.getrefcount(a))

140274625986568
140274625986568
597
596


2. 比较对象

<        

严格小于    
<=小于或者等于
>大于
>=大于或者等于
==等于
!=不等于
is比较对象连个对象的身份
is not 否定对象的身份

除了不同的数字类型,不同类型的对象永远不会相等。

def cmp(a,b):
    if a is b:   #比较两个对象的身份,也就是id()
        print("a is b")

    if  a==b:  #比较连个对象的值
        print("a==b")
    if type(a)==type(b): #比较连个对象的类型
        print("type equal")
            
cmp(1,2)


type equal
3.引用和复制

在程序进行a==b的后,a和b就是引用了同一个对象,修个其中一个就会影响到另一个对象,为避免这种情况,必须创建对象的副本而不是新的引用,对于列表和字典这样的容器,可以使用两种复制操作,浅复制和深复制,浅复制会创建一个新的对象,但它包含的是对原始数据的引用

#深复制
import copy
a=[1,2]
b=copy.deepcopy(a)
b[0]=3
print(b)
print(a)


[3,2]

[1,2]

#浅复制
a=[1,2]
b=a
b[0]=3
print(a)

[3,2]

3. Python中所有对象都是第一类,意思是能够使用标识符命名所有对象都具有的相同状态,也就是说能够命名的所有对象都可以当错数据处理

items={}
items["abs"]=abs;
print(items["abs"](-1))

将一行文本转换为列表    

line="Good,100,1.3"
types=[str,int,float]
fields=line.split(",")
print(fields)
result=[i(j) for i,j in zip(types,fields)]
print(result)
['Good', '100', '1.3']
['Good', 100, 1.3]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值