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标准库inspect的具体使用方法
Dec 06 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
Python语法分析之字符串格式化
Jun 13 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
通过python3实现投票功能代码实例
Sep 26 Python
Django之form组件自动校验数据实现
Jan 14 Python
selenium判断元素是否存在的两种方法小结
Dec 07 Python
Python的Tqdm模块实现进度条配置
Feb 24 Python
python中redis包操作数据库的教程
Apr 19 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数组函数
2008/08/18 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php实现telnet功能示例
2014/04/08 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
Python遍历文件夹和读写文件的实现方法
2017/05/10 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python随机函数random()使用方法小结
2018/04/29 Python
实例讲解python中的序列化知识点
2018/10/08 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
师范院校学生自荐信范文
2013/12/27 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
授权收款委托书范本
2014/10/10 职场文书
暑期社会实践证明书
2014/11/17 职场文书