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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
跟老齐学Python之不要红头文件(2)
Sep 28 Python
简单谈谈Python中的json与pickle
Jul 19 Python
python实现BackPropagation算法
Dec 14 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
基于Python实现用户管理系统
2019/02/26 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
2019/07/06 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
HTML5新标签兼容——> 的两种方法
2018/09/12 HTML / CSS
先进个人事迹材料
2014/01/25 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
2015新学期家长寄语
2015/02/26 职场文书
专项资金申请报告
2015/05/15 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python