可变对象和不可变对象

1,可变对象,list(列表),dict(字典),集合(set),字节数组。

2,不可变对象,数值类型,字符串,字节串,元组(具体形式 ())。

注意条件:可变和不可变指的是该对象指向的内存是否可以改变。当修改不可变对象的时候,它会重新复制一份,然后再改变相应的值,原来的那一分就会相当与垃圾被去除。

>>> print(id(aee))
140375930246848
>>> aee+= ()
>>> print(id(aee))// 加了一个空元素之后,元祖的地址改变了。
140375898807608
>>> stra= '12'
>>> print(id(stra))
140375899220376
>>> stra+= ''
>>> print(stra)
12
>>> print(id(stra))// 加了一个空字符的时候,字符串的地址并没有被改变。 int同理。但是float的话,会有精度问题
140375899220376

变量与对象的关系(多个变量共享引用同一对象)

1,不可变对象之间的改变不会互相影响

>>> a=1
>>> print(a)
1
>>> b=a
>>> print(b)
1
>>> b=2
>>> print(b)
2
>>> print(a)
1

2,可变对象之间的改变会相互影响

>>> a=[1,23,4]
>>> print(a)
[1, 23, 4]
>>> b=a
>>> print(b)
[1, 23, 4]
>>> b.append(188)
>>> print(b)
[1, 23, 4, 188]
>>> print(a)
[1, 23, 4, 188]

我觉得这个地方恰好解释了可变对象和不可变对象之间的区别,可变对象直接改变的是地址,所以指向这个地址的量对应的会发生改变,而不可变对象“修改”的原理是新开辟一段内存,把原来的内容复制过来,然后再进行相应的改变。

数字整数类型

十进制,1,23等等

十六进制,0X或者0x开头。

八进制,0O开头。

二进制,0B开头。

int不受位数的限制,只收内存的限制。

字符串(python中只接受unicode编码)

索引,切片

索引是取出一个字符,切片是取出一片字符。

>>> s="huangqingxiang"
>>> len(s)
14
>>> s[0]// 从第0位开始,长度是14的话,最后一位的编号为13
'h'
>>> s[-14]// 如果是从右边开始数的话,开始为-1
'h'
>>> [-1]
[-1]
>>> s[-1]
'g'
>>> s[13]
'g'
>>> s[14]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[5:8]//截取从编号为5的字符串到第7位停止,左必右开
'qin'
>>> s[5:]//从编号为5的开始往后所有的字符串都截取出来
'qingxiang'
>>> s
'huangqingxiang'

单个字符的字符串问题

>>> s='A'
>>> ord(s)//当前字符的ascii编码,ord是得到当前字符串的Unicode编码
65
>>> chr(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: an integer is required (got type str)
>>> chr(65)//ascii编码对应的字母
'A'

对encode()函数和decode()函数的初级理解

字面意思,encode指的是编码,decode指的是解码

>>> u='s'
>>> s1=u.encode('gb2312')//这里的gb2312指的是一种编码方式,获得bytes类型的类型对象
>>> s1
b's'
>>> s2=s1.decode('gb2312')
>>> s2
's'

字节串(不可变对象)

字节串类似于字符串,可以进行连接,重复运算。但是字节串是由单个字节组成的串,他的值是不可显示的代码,所以字节串是二进制数据,字符串值是文本数据序列。具体形式,数据的开始是以字母’b'或者‘B'开始,以单,双引号个三引号引起来的字节串。’

>>> x=b'\xff\xf1\x01'
>>> type(x)
<class 'bytes'>
>>> x=B'\xff\xf1\x01'
>>> type(x)
<class 'bytes'>
>>> x=bytes(10)
>>> x
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

字节数组

>>> bytearray()
bytearray(b'')
>>> x=bytearray(10)
>>> x
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')

python 第二章 对象与类型的更多相关文章

  1. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  2. 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)

    编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...

  3. javascript进阶课程--第二章--对象

    javascript进阶课程--第二章--对象 学习要点 理解面向对象的概念 掌握对象的创建方法 掌握继承的概念和实现方法 基本概念 对象究竟是什么?什么叫面向对象编程? 对象是从我们现实生活中抽象出 ...

  4. javascript进阶教程第二章对象案例实战

    javascript进阶教程第二章对象案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过案例练习补充几个之前没有见到或者虽然讲过单是讲的不仔细的知识点. 二.具体实例 温馨提示 面向对象的知 ...

  5. c#高级编程第七版 学习笔记 第三章 对象和类型

    第三章 对象和类型 本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来 3.1 类和结构 ...

  6. Python 第二章-列表和元组

    第二章-列表和元组 2.0      在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...

  7. Java第二章----对象和类

    从第一章到第二章整整隔了一个月的时间,这速度也是慢的无语了.因为这个月负责开发公司一个SaaS类型APP,忙的昏天暗地终于上线了,这才有时间写个博客.本章还是以概念为主,有点枯燥重在理解. 第一节:对 ...

  8. s2第二章深入c#类型

    S2第二章预习笔记  深入c# 数据类型 常用类型      java     c#     举例 整形          int     int     年龄 浮点型        float    ...

  9. 《疯狂Java:突破程序员基本功的16课》读书笔记-第二章 对象与内存控制

    Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制 ...

随机推荐

  1. 使用 Maven 管理项目

    最近的练手项目使用的是 Maven 在管理项目,在使用 Maven 管理项目时,三层的开发时分模块开发的,parent-dao-service-web,所有的spring+struts + Hiber ...

  2. LoadRunner录制用户操作

    先说明一点,使用录制的手段拿到的测试脚本和工程师自己编写的测试脚本其实是一样的,不要觉得录制的方式low,而自己编写脚本就显得高大上,这是不对的.除非工程师本身对开发们写的代码逻辑很熟,对业务上的各个 ...

  3. BZOJ4915 简单的数字题

    不妨设a1<a2<a3<a4.显然第一问的答案是4,满足a1+a4=a2+a3,a1+a2|a3+a4,a1+a3|a2+a4.容易发现将其同时扩大k倍是仍然满足条件的,于是考虑gc ...

  4. Day22-CSRF跨站请求伪造

    csrf 跨站请求伪造 一.简介 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成. 1.1 第1次 ...

  5. XML 增加属性

    var resultDoc = new XmlDocument(); resultDoc.LoadXml("<root></root>"); resultD ...

  6. hdu4554 A Famous Game 概率期望

    题面 题意:n个球,2种颜色,可能有0~n个红球,每种情况的概率相同.现在从箱子里取出了$p$个球,其中有$Q$个是红球,问现在再取一个球是红球的概率为多少? 题解:因为0 ~ n的概率相同,所以每个 ...

  7. 【51Nod1386】双马尾机器人Description 解题报告

    [51Nod1386]双马尾机器人Description ​ 给定\(n\)和\(k\),我们要在\(1,2,3,...,n\)中选择若干的数,每一种选择的方案被称为选数方案. ​ 我们定义一种选数方 ...

  8. 解题:BOI 2008 Elect

    题面 做背包时可以通过排序来使得转移满足某种限制或是让我们判断一个状态是否有贡献 这个题将人数从大到小排序后做背包,这样每次那个最小的党加入而使得答案合法时之前的党也都是合法的 #include< ...

  9. 2-sat问题学习记录

    如果你不知道什么是sat问题,请看以下问答. Q:sat问题是什麽?A:首先你有n个布尔变量,然后你有一个关于这n个布尔变量的布尔表达式,问你,如果让你随意给这n个布尔变量赋值,这个布尔表达式能否成立 ...

  10. Linux之时间相关操作20170607

    一.Linux常用时间相关函数 -asctime,ctime,getttimeofday,gmtime,localtime,mktime,settimeofday,time asctime       ...