Python学习——深浅拷贝
1.对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。
>>> import copy
# ######### 数字、字符串 #########
>>> n1 = 123
>>> print(id(n1)) # ## 赋值 ##
>>> n2 = n1
>>> print(id(n2)) # ## 浅拷贝 ##
>>> n2 = copy.copy(n1)
>>> print(id(n2)) # ## 深拷贝 ##
>>> n3 = copy.deepcopy(n1)
>>> print(id(n3)) 2.对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。
赋值:只是创建一个变量,该变量指向原来内存地址
>>> n1 = {"k1": "hu", "k2": 123, "k3": ["hh", 456]}
>>> n2 = n1 浅拷贝:在内存中只额外创建第一层数据但是值得地址不变
>>> import copy
>>> n1 = {"k1": "hu", "k2": 123, "k3": ["hh", 456]}
>>> n2 = copy.copy(n1)
>>> print(id(n1))
5706496
>>> print(id(n2))
6270928 >>> print(id(n1['k1']))
6204824
>>> print(id(n2['k1']))
6204824 深拷贝:在内存中将所有的数据重新创建一份
>>> import copy
>>> n1 = {"k1": "hu", "k2": 123, "k3": ["hh", 456]}
>>> n2 = copy.deepcopy(n1)
>>> print(id(n1))
5706496
>>> print(id(n2))
6270808 >>> print(id(n1['k1']))
6204864
>>> print(id(n2['k1']))
500261040 例:
字典dic ={'k1':[20,30],'k2':[40,50],'k3':[50,60]},现在需要更新该字典保存在新字典new_dic 中但不改变原字典
>>> dic ={'k1':[20,30],'k2':[40,50],'k3':[50,60]}
浅拷贝:
>>> new_dic = copy.copy(dic)
>>> new_dic['k1'][0] = 100
#浅拷贝改变新字典的同时也改变了原来的字典
>>> print(new_dic)
{'k1':[100,30],'k2':[40,50],'k3':[50,60]}
>>> print(dic)
{'k1':[100,30],'k2':[40,50],'k3':[50,60]} 深拷贝:
>>> new_dic = copy.deepcopy(dic)
>>> new_dic['k1'][0] = 100
#深拷贝只改变新字典
>>> print(new_dic)
{'k1':[100,30],'k2':[40,50],'k3':[50,60]}
>>> print(dic)
{'k1':[20,30],'k2':[40,50],'k3':[50,60]} python之邮件发送源码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
# @time : 2017/4/10 22:58
# @author : huange
# @version : 1.1
# @file : mail.py
# @Software: PyCharm
'''
#coding:utf-8 #强制使用utf-8编码格式
import smtplib #加载smtplib模块
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender='********@163.com' #发件人邮箱账号,为了后面易于维护,所以写成了变量
#my_user='*******@qq.com' #收件人邮箱账号,为了后面易于维护,所以写成了变量
def mail(my_user): #user为形式参数
ret=True
try:
content = '''
hello world!
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,
由它来控制信件的中转方式。
'''
msg=MIMEText(content,'plain','utf-8')
msg['From']=formataddr(["欢哥",my_sender]) #括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To']=formataddr(["一蓑烟雨",my_user]) #括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject']="python邮件测试" #邮件的主题,也可以说是标题 server=smtplib.SMTP("smtp.163.com",25) #发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender,"邮箱密码") #括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender,[my_user,],msg.as_string()) #括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() #这句是关闭连接的意思
except Exception as e: #如果try中的语句没有执行,则会执行下面的ret=False
print(e)
ret=False
return ret ret=mail('*******@qq.com') #实参
if ret:
print("ok") #如果发送成功则会返回ok,稍等20秒左右就可以收到邮件
else:
print("filed") #如果发送失败则会返回filed

PS:用163邮箱作为发送邮箱时需要先登录163邮箱在“设置”中将SMTP服务器开启!
Python学习——深浅拷贝的更多相关文章
- Python学习---深浅拷贝的学习
浅拷贝copy(): 修改字符串,原来的不变: 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层,第二层不被copy 深拷贝: 需要单独的 ...
- Python原理 -- 深浅拷贝
python原理 -- 深浅拷贝 从数据类型说开去 str, num : 一次性创建, 不能被修改, 修改即是再创建. list,tuple,dict,set : 链表,当前元素记录, 下一个元素的位 ...
- Python的深浅拷贝
Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...
- 图解Python中深浅拷贝
在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...
- 24、简述Python的深浅拷贝以及应用场景
深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...
- Python入门-深浅拷贝
首先我们在这里先补充一下基础数据类型的一些知识: 一.循环删除 1.前面我们学了列表,字典和集合的一些操作方法:增删改查,现在我们来看一下这个问题: 有这样一个列表: lst = ['周杰伦','周润 ...
- day2学python 数据类型+深浅拷贝+循环
数据类型+深浅拷贝+循环 别的语言的数组 python不用定义 直接使用 color=['红','橙','黄','绿','青','蓝','紫'] print(color[1:3]) //打印[1,3) ...
- 简述Python的深浅拷贝以及应用场景
深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝 ...
- python 赋值 深浅拷贝
深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 impor ...
随机推荐
- c# 登录 防止sql注入 mysql数据库
利用参数化 防止SQL注入 public string serachName(string name) { string result = ""; try { conn.Open( ...
- zabbix3.0对tcp连接数和状态的监控优化
zabbix3.0对tcp连接数及状态的监控优化 之前对tcp的监控采用netstat命令,发现在服务器繁忙的时候效果不理想,这个命令占用大量的cpu有时候高达90%以上,可能会导致业务的不稳定,所以 ...
- centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享
FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立 ...
- centos6中iptables单机网络防火墙的使用
概述: iptables:基于软件的形式实现的一种防火墙的软件程序 Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是 ...
- centos6下通用二进制安装mysql5.5.33
mysql5.5通用二进制格式安装方法 1.解压到 /usr/local 目录 # tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local 2 ...
- PL/SQL第三章 基础查询语句
--查询所有列 select * from tab_name|view_name; SELECT * FROM emp; SELECT * FROM (SELECT * FROM emp); --查询 ...
- STM32应用实例八:与多台MS5803压力传感器I2C通讯
MS5803压力传感器支持SPI和I2C总线通讯,拥有24位AD转换.能够同时获得压力值和温度值,其中压力测量范围为10-1100mbar,温度的测量范围是-40-85摄氏度.各引脚功能及参数如下: ...
- LeetCode(47):全排列 II
Medium! 题目描述: 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2], [1,2,1], [2,1,1] ] 解题思路: 这道 ...
- linux java报错汇总
一:♦linux 下javac 编译报 需要class, interface 或enum错误 ♦解析时已到达文件结尾 原因:大括号补匹配 //注意看报警提示
- js事件驱动函数
输入框 获得光标的这个行为叫做获取焦点 失去光标的这个行为叫做失去焦点 blur 失去焦点 1.获取标签的时候,一定要先等页面加载完成,再去获取这个标签. 可以将整个script代码写在body的下面 ...