赤坎手机网站建设,wordpress文章改背景色,百度seo优化网站,岳阳注册公司1. 字典拷贝
有些场景下#xff0c;需要对字典拷贝一个副本。这个副本用于保存原始数据#xff0c;然后原来的字典去参与其他运算#xff0c;或者作为参数传递给一些函数。
例如#xff0c; dict_a {name: John, address需要对字典拷贝一个副本。这个副本用于保存原始数据然后原来的字典去参与其他运算或者作为参数传递给一些函数。
例如 dict_a {name: John, address:221B Baker street}dict_b dict_a利用赋值运算法把dict_a赋值给dict_b之后这2个变量的值是相同的。
你或许会拿着dict_b去参与其他的运算例如更新/添加键值对。
但事实却不是你认为的那样如果你更新或者编辑dict_bdict_a也会随之改变详细内容可以了解一下Python可变对象与不可变对象。 下面来看一下效果 dict_b[age] 26dict_b
{address: 221B Baker street, name: John, age: 26}dict_a
{address: 221B Baker street, name: John, age: 26}你会发现给dict_b添加了一个age:26键值对dict_a也更新了这样我们留一个副本就没有任何意义了。
针对这个问题可以用Python中的浅拷贝copy、深拷贝deepcopy来解决下面来看一下 dict_c dict_b.copy()dict_c[location] somewheredict_c
{address: 221B Baker street, name: John, age: 26, location: somewhere}dict_b
{address: 221B Baker street, name: John, age: 26}2. 字典键值 True和1 dict_a dict()dict_a
{}dict_a[1] appledict_a[True] mangodict_a[2] melondict_a
{1: mango, 2: melon}你注意到发生了什么吗
输出字典之后发现键值True没有了
这是因为在Python中True相当于1、False相当于0因此在dict_a[True] mango这行代码里它把原来键值为1给替换了。
可以来验证一下True相当于1的说法 isinstance(True, int)
TrueTrue 1
True3.驻留字符串
在某些情况下Python尝试重用现有的不可变对象。 字符串驻留就是这样一种情况。来看一个示例对比 a gmailb gmaila is b
True然后修改一下 a gmailb gmaila is b
False是不是很神奇我们只加了一个符号结果却截然不同
在第一个实现方法中尝试创建两个不同的字符串对象。但是当检查两个对象是否相同时它返回True。
这是因为python并没有创建另一个对象b而是将b指向了第一个值gmail换句话说它被驻留了。
但是如果字符串中除ASCII字符、数字、下划线以外的其他字符时它则不会驻留这样的话它就不会再指向gmail。
这里需要注意一下is与的运算是不同的。
用于判断值是否相等is不仅需要值相等还需要指向同一个对象。 a gmailb gmaila is b
Falsea b
True4. 默认参数只计算一次 def func(a, lst[]):
... lst.append(a)
... return lst
... print(func(1))
[1]print(func(2))
[1, 2]这里发生了什么
我在func中给了一个默认参数[]然后先后调用2次func函数。
按照我们常规的认识这2次调用是分开的第1次调用输出[1]第二次应该输出[2]为什么第2次调用时列表里竟然还保留着第1次调用时的值
这是因为在Python中默认参数只会被计算一次。第1次调用func(1)时它用到了默认参数。但是第2次调用就不会再去计算默认参数直接在[1]的基础上附加一个值。