python dict 字典 以及 赋值 引用的一些实例(详解)


Posted in Python onJanuary 20, 2017

最近在做一个很大的数据库方面的东东,要用到根据数值来查找,于是想到了python中的字典,平时没用过dict这个东东

用的最多的还是 list 和 tuple (网上查 用法一大堆)

看了一下创建字典的方法:

方法1:

dict = {'name': 'earth', 'port': 80}

方法2:

fdict = dict((['x', 1], ['y', 2]))

方法3:

ddict = {}.fromkeys(('x', 'y'), -1)

都实验了一下这些方法,发现不好用,做不出来自己想要的结果,因为数据库查找出来的结果是tuple类型的,不能改变,用方法2,必须得确保里面

是list (在这里提一下,tuple和list类型互换的方法 l=tuple(l) l = list(l))

在做练习的时候突然看到了一种方法,先声明一个

fdict= {}

然后

fdict[keys] = values

然后接下来继续循环这个式子就行了,结果能一个一个添加到fdict中,而不会被覆盖,以前还以为会默认覆盖成新的

用这种方法,一下就把结果转成了键值对

python中传值其实传的是地址:

例子:

a = [1,2,3,4]

b = a

a.append(1)

print a

print b

结果可以发现两个结果都为:[1,2,3,4,1]

这说明 python中的一个变量给另一个变量赋值时,传的是地址,所以当a指向的值变化时,b由于获得的是指向a的一个指针,所以结果也会

跟a的输出结果一样

more experiments:

a = [1,2,3,4]

b = a

a += [1] #在尾部增加一个list值

print a

print b

可以看到结果为:

[1, 2, 3, 4, 1]

[1, 2, 3, 4, 1]

这个没有什么问题,还是跟上面的解释一样,传的是地址,无论a怎么添加,b都是跟a地址相同的输出

再看下一个实验:

a = [1,2,3,4]

b = a

a = a + [1] #在尾部增加一个list值

print a

print b

读者可以试着跑一下看看结果

运行的结果为:

[1,2,3,4,1]

[1,2,3,4]

这是为什么呢?

为什么 += 和分开相加之后就不同结果了呢

通过查资料,我确信了以下解释:

当a = a+[1]时,系统所做的是把a + [1]的结果先放到另外一个地址c中,然后再把a指向这个c地址,所以输出a的时候,结果是可想而知的

但是b还是指向以前a的位置,以前位置的值并没有变化,所以b才会输出这样一个令人稍感诧异的值

而+=操作,还是在原来a指向的地址上进行操作,所以b也会跟着变化

总结:python中一个变量给另一个变量进行赋值操作(=)时,传的不是值,而是指针地址,一定要谨慎操作,避免掉坑

以上这篇python dict 字典 以及 赋值 引用的一些实例(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
探寻python多线程ctrl+c退出问题解决方案
Oct 23 Python
python实现bucket排序算法实例分析
May 04 Python
python处理二进制数据的方法
Jun 03 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
Python实现的多进程和多线程功能示例
May 29 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
Python PyCharm如何进行断点调试
Jul 05 Python
Python socket聊天脚本代码实例
Jan 02 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
python装饰器代码解析
Mar 23 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
Jan 20 #Python
python 查找字符串是否存在实例详解
Jan 20 #Python
python django 访问静态文件出现404或500错误
Jan 20 #Python
python中实现迭代器(iterator)的方法示例
Jan 19 #Python
Python正则替换字符串函数re.sub用法示例
Jan 19 #Python
Python中二维列表如何获取子区域元素的组成
Jan 19 #Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 #Python
You might like
一个简单的PHP入门源程序
2006/10/09 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
Javascript this指针
2009/07/30 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
2017/01/23 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
H5+C3+JS实现双人对战五子棋游戏(UI篇)
2020/05/28 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
详解python上传文件和字符到PHP服务器
2017/11/24 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
关于Tensorflow分布式并行策略
2020/02/03 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
大学生求职推荐信
2013/11/27 职场文书
聘用意向书范本
2014/04/01 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
幼儿园运动会口号
2014/06/07 职场文书
商业门面租房协议书
2014/11/25 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
Mysql排序的特性详情
2021/11/01 MySQL