'Hello, %s' % name "Hello, Bob" 'Hey %(name)s, there is a 0x%(errno)x error!' % { "name": name, "errno": errno } 'Hey Bob, there is a 0xbadc0ffee error!'
'Hello, {}'.format(name) 'Hello, Bob' 'Hey {name}, there is a 0x{errno:x} error!'.format( name=name, errno=errno) 'Hey Bob, there is a 0xbadc0ffee error!'
python 3.6新出的,本人用了这个以后, 果断抛弃其余方法, 真的太强大了!!!python
name = Bob
f'Hello, {name}!' 'Hello, Bob!' def greet(name, question): ... return f"Hello, {name}! How's it {question}?" ... greet('Bob', 'going') "Hello, Bob! How's it going?"
templ_string = 'Hey $name, there is a $error error!' Template(templ_string).substitute( ... name=name, error=hex(errno)) 'Hey Bob, there is a 0xbadc0ffee error!'
id => id是内存地址
is => 比较两边的内存地址是否相等 == => 比较两边的数值是否相等 = => 是赋值
小数据池,也称为小整数缓存机制,或者称为驻留机制等等,算法
对于数字: -5~256是会被加到⼩小数据池中的. 每次使⽤用都是同⼀一个对象.docker
对于字符串串:数据库
1.若是字符串串的长度是0或者1, 都会默认进行缓存缓存
2.字符串长度大于1, 可是字符串中只包含字母, 数字, 下划线时才会缓存bash
3.用乘法的到的字符串乘数为1, 仅包含数字,字母,下划线时会被缓存. 若是
包含其余字符, 而长度<=1 也会被驻存,乘数大于1 . 仅包含数字, 字母, 下划
线这个时候会被缓存. 但字符串串长度不能大于20服务器4.指定驻留留. 咱们能够经过sys模块中的intern()函数来指定要驻留留的内容.app
共享小数据池:int,str,bool函数
没有建立新对象, 是一个内存指向的转换性能
copy浅拷贝,没有拷贝子对象,因此原始数据改变,子对象会改变。只会拷贝第一层内容
copy.deepcopy深拷贝,包含对象里面的自对象的拷贝,因此原始对象的改变不会形成深拷贝里任何子元素的改变。所有拷贝一份
import copy a = [1,23,66,[6,8]] d = a b = copy.copy(a) c = copy.deepcopy(a) a.append(99)#[1, 23, 66, [6, 8], 99] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8], 99] print(a,b,c,d) a[3].append(88)#[1, 23, 66, [6, 8, 88], 99] [1, 23, 66, [6, 8, 88]] [1, 23, 66, [6, 8]] [1, 23, 66, [6, 8, 88], 99] print(a,b,c,d)
一. Python内部使用引用计数机制, 来保持追踪内存中的对象,全部对象都有引用计数. 一个对象分配一个新名称,而后将其放入到一个容器中(如列表, 元祖, 字典), 这样这个计数就增长. 当咱们使用delect删除语句对对象别名进行删除或者,引用超过了这个做用域,或者被从新复制的时候,引用的计数会减小.对于不可变数据(数字,字符串)解释器会在程序的不一样部分共享内存,以便节约内存.sys.getrefcount( )函数能够得到对象的当前引用计数
二. 这个垃圾回收机制呢, 就是当一个对象的引用计数归零时,他就会被垃圾回收机制处理掉 ,当两个对象相互引用的时候, del语句能够减小 引用次数并销毁引用底层对象的名称, 因为每一个对象都包含一个对其余对象的引用, 所以引用计数不会归零, 对象也不会销毁,为解决这一问题,解释器会按期执行一个循环检测器,搜索不可访问对象的循环并删除它们。
三.内存池机制
Python提供了对内存的垃圾收集机制,可是它将不用的内存放到内存池而不是返回给操做系统。
1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。
2,Python中全部小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。
3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说若是你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。
Hash(哈希) 通常译为“散列”,它是一种加密过的存储结构。它将任意长度的输入,经过散列算法,转换成固定长度的输出。而这个输出就是散列的值。而且,这个转换过程是一种压缩映射,因此,散列值的空间远小于输入值的空间。另外,不一样的输入可能会散列出相同的输出,因此不能从散列值来肯定其输入值是什么。hash应用中一个简单的例子就是短连接。短连接是一个hash后的散列值,它的输入值就是原始连接。首先,咱们拿到一个原始连接,到一个具备hash功能的服务器上,作hash转换,获得一个散列值,这个值就是短连接的值。前面说到过,散列值会远小于输入值,因此短连接比原连接字符长度小了许多。而后,再将这个短连接与原连接存到服务器上的数据库中,造成映射关系。当有人访问服务器上的短连接时,只须要从映射关系中找到原始连接,便可跳转到原始连接。
Hash 的一个特色就是性能好,查询起来很快。它是一种以空间换取时间的方案。
简单说,若是一个对象是可哈希的, 那么生命周期内这个对象不可变,如:int,float,string, tuple.反之, 不可哈希的对象可变, 像lsit, dict, set.