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.copy(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之邮件发送源码:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 ‘‘‘ 4 # @time : 2017/4/10 22:58 5 # @author : huange 6 # @version : 1.1 7 # @file : mail.py 8 # @Software: PyCharm 9 ‘‘‘ 10 #coding:utf-8 #强制使用utf-8编码格式 11 import smtplib #加载smtplib模块 12 from email.mime.text import MIMEText 13 from email.utils import formataddr 14 my_sender=‘********@163.com‘ #发件人邮箱账号,为了后面易于维护,所以写成了变量 15 #my_user=‘*******@qq.com‘ #收件人邮箱账号,为了后面易于维护,所以写成了变量 16 def mail(my_user): #user为形式参数 17 ret=True 18 try: 19 content = ‘‘‘ 20 hello world! 21 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则, 22 由它来控制信件的中转方式。 23 ‘‘‘ 24 msg=MIMEText(content,‘plain‘,‘utf-8‘) 25 msg[‘From‘]=formataddr(["欢哥",my_sender]) #括号里的对应发件人邮箱昵称、发件人邮箱账号 26 msg[‘To‘]=formataddr(["一蓑烟雨",my_user]) #括号里的对应收件人邮箱昵称、收件人邮箱账号 27 msg[‘Subject‘]="python邮件测试" #邮件的主题,也可以说是标题 28 29 server=smtplib.SMTP("smtp.163.com",25) #发件人邮箱中的SMTP服务器,端口是25 30 server.login(my_sender,"邮箱密码") #括号中对应的是发件人邮箱账号、邮箱密码 31 server.sendmail(my_sender,[my_user,],msg.as_string()) #括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 32 server.quit() #这句是关闭连接的意思 33 except Exception as e: #如果try中的语句没有执行,则会执行下面的ret=False 34 print(e) 35 ret=False 36 return ret 37 38 ret=mail(‘*******@qq.com‘) #实参 39 if ret: 40 print("ok") #如果发送成功则会返回ok,稍等20秒左右就可以收到邮件 41 else: 42 print("filed") #如果发送失败则会返回filed
PS:用163邮箱作为发送邮箱时需要先登录163邮箱在“设置”中将SMTP服务器开启!
时间: 2024-08-25 20:46:01