小数据池,基础类型的补充

s = ‘alex‘
print(id(s)) # 获取内存地址

== 判断两个对象的值相同.
i = 100
i1 = 100
print(i == i1)

is 身份运算:判断的是两个对象的内存地址是否相同.

i1 = 10
i2 = 10
print(i1 is i2)

代码块
i = 1
i2 = 3
i3 = 4

一个文件是一个代码块.(函数,类都是一个代码块.)
交互命令中一行就是一个代码块.

同一个代码块:同一代码块的缓存机制,驻留机制.

i1 = 100
i2 = 300
i3 = 100
l1 = [1,2,3]
l2 = [1,2,3]
print(l1 is l2)
tu1 = (1,2,)
tu2 = (1,2,)

print(tu1 is tu2)

同一个代码块驻留机制的目的:
‘‘‘
1,节省内存空间.
2,提升性能.
‘‘‘
驻留机制针对的对象: int bool str ()空元组.

int: 范围 任意数字
i1 = 1212312312312312312312312
i2 = 1212312312312312312312312
print(i1 is i2)
bool True Fasle
str:几乎所有的字符串都会符合缓存机制,
s1 = ‘fdsfdsjklffdsafdsadsjfkldsfldsfdsjlkfdsl@#$‘
s2 = ‘fdsfdsjklffdsafdsadsjfkldsfldsfdsjlkfdsl@#$‘
print(s1 is s2)
通过相乘的形式构建的字符串长度不能超过20满足同一代码块的驻留机制.
s1 = ‘old_‘ * 5
s2 = ‘old_‘ * 5
print(s1 is s2) # True

不同的代码块之间: 小数据池.
小数据池是针对 不同代码块 之间的缓存机制!!!

小数据池的目的:
‘‘‘
1,节省内存空间.
2,提升性能.
‘‘‘
小数据池针对的对象: int bool str ()空元组.

int: -5 ~256
str: 一定规则的字符串

总结
‘‘‘
 如果在同一代码块下,则采用同一代码块下的换缓存机制。

  如果是不同代码块,则采用小数据池的驻留机制。
‘‘‘
i1 = 1000
i2 = 1000
print(i1 is i2)

数据类型之间的转换
int bool str list tuple dict set
‘‘‘int bool str 三者转化是可以的.‘‘‘

bool 可以与所有的数据类型进行转换.
所有为空的数据类型转化成bool都为Fasle.
0 ‘‘ [] () {} None ----> Fasle
print(bool([])) # False

str ---> list split 分割
list ---> str join # list里面的元素全部都是str类型
l1 = [‘武sir‘, ‘alex‘, ‘太白‘]# print(‘ ‘.join(l1))

str ----> tuple # partition
tuple ---> str join
tu1 = (‘武sir‘, ‘alex‘, ‘太白‘)
ret = ‘ ‘.join(tu1)
print(ret,type(ret))

list<----->tuple
l1 = [‘武sir‘, ‘alex‘, ‘太白‘]
print(tuple(l1))
tu1 = (‘武sir‘, ‘alex‘, ‘太白‘)
print(list(tu1))

dict ----> list
dic = {‘name‘:‘alex‘,‘age‘: 73}
print(list(dic))

set list 转化 下午讲.

tuple: 如果元组中只有单个元素并且没有 , 则类型是元素本身的类型.
tu1 = (1)
tu1 = (‘alex‘,)
print(tu1,type(tu1))

dict

dic = {‘name‘:‘alex‘,‘age‘: 73}
dic[‘money‘] = ‘10万‘
print(dic)

dic = dict.fromkeys([1,2,3],‘太白‘)
dic = dict.fromkeys(‘abcd‘,‘太白‘)
dic = dict.fromkeys(‘abcd‘,[1,])
坑: 如果你的值是一个可变的数据类型, 他在内存中是一个.id相同.
dic = dict.fromkeys(‘abcd‘,[])
dic[‘a‘].append(666)
dic[‘b‘].append(111)
dic[‘c‘].append(222)
print(dic)

l1 = [1,2,3]
l2 = l1
l3 = l2
l1.append(666)
l2.append(111)
print(l1)

l1 = [11, 22, 33, 44, 55]
将此列表索引为奇数位对应的元素全部删除.

方法一:
del l1[1::2]
print(l1)

方法二:错误示例:

循环一个列表时,不要改变列表的大小.这样会影响你最后的结果.
for index in range(len(l1)):
if index % 2 == 1:
# index 奇数
l1.pop(index)
print(l1)

方法三
new_l = []
for index in range(len(l1)):
if index % 2 == 0:
new_l.append(l1[index])
print(new_l)
l1 = new_l
print(l1)

方法三:
for index in range(len(l1)-1,-1,-1):
if index % 2 == 1:
l1.pop(index)
print(l1)

循环一个列表时,最好不要对原列表有改变大小的操作,这样会影响你的最终结果.

dic = {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘, ‘name‘: ‘alex‘}
将字典中的key中含有k元素的所有键值对删除.
dictionary changed size during iteration
for key in dic:
if ‘k‘ in key:
dic.pop(key)
print(dic)

l1 = []
for key in dic:
if ‘k‘ in key:
l1.append(key)
print(l1)
for key in l1:
dic.pop(key)
print(dic)

循环一个字典时,不能改变字典的大小,这样会报错.

原文地址:https://www.cnblogs.com/guoqiming/p/10538860.html

时间: 2024-08-01 18:07:01

小数据池,基础类型的补充的相关文章

python基础之小数据池、代码块、编码

一.代码块.if True: print(333) print(666) while 1: a = 1 b = 2 print(a+b) for i in '12324354': print(i) 虽然上面的缩进的内容都叫代码块,但是他不是python中严格定义的代码块.python中真正意义的代码块是什么? 块是一个python程序的文本,他是作为一个单元执行的.代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而对于一个文件中的两个函数,也分别是两个不同的代码块: def fu

Python基础之小数据池及深浅拷贝

一.小数据池 == (等于) == 官方:判断等号两边的内容是否相同 ? 白话:判断两个人长得是不是一样 is ? 官方:判断两边的内容是不是一个 ? 白话:判断这两个人是不是一个人 a = 10000 b = 10000 print(a == b) is 是通过内存地址进行判断 print(id(a),id(b)) 输出结果 ,内存地址一致 代码块:一个py文件,一个函数,一个模块,一个类,交互模式(终端)下的每一行 先执行代码块,然后小数据池! 代码块机制内容:Python在执行同一个代码块

python基础之小数据池

关于池的概念,大家也许知道 连接池,代理池.然而现在我们提到的小数据池,则是一些Int和string已经创建好的并放在池子里等着我们去调用的对象. '''对于整数,Python官方文档中这么说: The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just

python基础4(小数据池,编码,深浅拷贝)

1.==与is == 比较值是否相等 is比较内存地址是否相同 2.小数据池 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址 数字范围:-5 ~ 256 num1 = 3 num2 = 3 i1 = id(num1) i2 = id(num2) #此时i1==i2 3.编码 ascii:     8位       1字节     表示一个字符 unicode:  32位     4字节     表示一个字符 utf-8 英文    8位    1字节 欧洲

相识python 之小数据池 集合

?一. ?小数据池 在说?小数据池之前. 我们先看?一个概念念. 什什么是代码块: 根据提示我们从官?方?文档找到了了这样的说法: A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class

Python 代码块 小数据池

一  代码块 什么是代码块??? Python程序是由代码块构造的.先举一个例子: 1 for i in '12334567': 2 print(i) 1 def func(): 2 print('Hello,world!') 1 class A: 2 name = 'colin' 从上面的例子可以称为代码块,虽然上面的缩进的内容都叫代码块,但是他们并不是python中严格定义的代码块. 那么,python中真正意义上的代码块又怎么定义? 因此,我们定义:一个模块,一个函数,一个类,一个文件等都

小数据池 (常量池 -&gt; 字符串缓存) is和==的区别 重新看编码 以及编码之间相互转化

?. 小数据池 在说小数据池之前. 我们先看一个概念念. 什么是代码块: 根据提示我们从官?方?文档找到了这样的说法: A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class defin

python2、python3 的区别及小数据池

一.python2 与python3的区别 1.print    python2中输出的格式为:print''    python3输出为print() 2.在python2中xrange是个生成器,可以转化成range,在python3中直接是range 3.在python2中用户交互是raw_input,在python3中是input. 二.关于内存地址(只有数字和字符串才有小数据池,    = 是赋值,==是比较的是值,is 是比较,比较的是内存地址  ) 关于 is 比较内存地址的情况:

18/5/4 小数据池,编码的进阶

一.内存地址(id): 变量:将计算的中间结果储存起来,以便后续代码使用 问题来了:变量存在哪里呢,或许可以这样问:变量储存在内存哪里呢? 内存会进行分区,每个分区都有一个序号,而每个分区里面都储存着数据,变量就来自这里,而分区的序号就叫内存地址 python 这门语言不像 C 语言,C 语言是属于内存级别的语言,C 涉及到指针,内存.而 python 不同,它的内存级别的已经设计好了.所以 python 比 C 简单,也正是如此,虽然 python 也有内存地址这个概念,但是它的内存地址和真实