4-1.
所有的Python对象都拥有三个特性:身份,类型和值。
身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。(python中的一切都是指针)
类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以使用内建函数type()查看对象的类型。在Python中类型也是对象。
值:对象表示的数据项。
身份相同类型的id一样的。
4-2.
类型。不可更改(immutable)指的是什么?Python的哪些类型是可更改(mutable)的,哪些不是?
如果对象支持更新操作,那么它的值就可以改变,否者它的值也是只读的。对象的值是否可以更改被称为对象的可改变性(mutablility)。
不可更改指更改后会产生新的对象(id),可更改则相反。
mutable的类型有:list、dict
immutable的类型有:str、int和tuple
4-3.
类型。哪些Python类型是按照顺序访问的,他们和映射类型的不同是什么?
根据访问被存储的数据的方式可以对数据类型进行分类。访问方式有三种:直接存取、顺序和映射。
所有的数值类型是按照直接存取访问的。
字符串、列表、元组是按照顺序访问的。这是指元素按照从0开始的索引顺序访问。
字典是映射访问。在字典里的元素,它们的索引并不使用顺序的数字偏移量取值,它的元素无序存放,通过一个唯一的键来访问。
目前只有唯一一种映射类型就是dict。
4-4.
type()。内建函数type()作什么?type()返回的对象是什么?
内建函数type()返回任意Python对象的数据类型,而不局限于标准类型。在types模块中列出了可能的数据类型。这对于处理多种数据类型的帮助者函数非常有用。
4-5.
str()和repr()。内建函数str()与repr()之间的不同是什么?哪一个等价于反引号(``)操作符?
内建函数str()和repr()或反引号操作符(``)可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。str()函数得到的字符串可读性好,而repr()函数得到的字符串通常可以用来重新获得该对象,通常情况下obj== eval(repr(obj))这个等式是成立的。这两个函数接受一个对象作为其参数,返回适当的字符串。
repr()输出对Python比较友好,而str()的输出对用户比较友好。
``==repr(),Python社区表示反引号(``)操作符已经不鼓励继续使用。
str()致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值。
4-6.
对象相等。你认为type(a) == type(b)和type(a) is type(b)之间的不同是什么?为什么会选者后者?函数isinstance()与这有什么关系?
“==”比较的是值,is比较的是对象。因为每个对象只可能有一种类型的值,所以可以直接比较他们id,而不用先计算值再做比较。
函数isinstance()用来确定这个对象是否属于这个类型,或者实例是否属于某个类。
4-8.
列表和元组。列表和元组的相同点是什么?不同点是什么?
列表是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目。列表中的项目。列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表。一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目。由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的。列表是可以嵌套的。
元祖和列表十分相似,不过元组是不可变的。即你不能修改元组。元组通过圆括号中用逗号分隔的项目定义。元组通常用在使语句或用户定义的函数能够安全的采用一组值的时候,即被使用的元组的值不会改变。元组可以嵌套。
【参考】 点击打开链接
4-9.
实践,给定以下赋值:
a = 10
b = 10
c = 100
d = 100
e = 10.0
f = 10.0
请问下面各表达式的输出是什么?为什么?
(a) a is b
(b) c is d
(c) e is f
>>> a = 10
>>> b = 10
>>> c = 100
>>> d = 100
>>> e = 10.0
>>> f = 10.0
>>> a is b
True
>>> c is d
True
>>> e is f
False
python 会缓存一些字符串和一些整形,a和b id相同,缓存位置相同没有建立新的身份。 浮点的ID不一样所以他们有两种身份。