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.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

Python学习——深浅拷贝的相关文章

针对Python的深浅拷贝问题

前些天做了个小程序,遇到了Python的深浅拷贝问题 感觉自己基础不够扎实,就翻了翻教程,真的是非常基础的知识...(各位大佬下手轻点2333) 下面简单说说: 首先有个字典a 1 a = {'A':1,'B':2,'C':3,'D':4} 然后我们把它赋值给另外一个空字典b 1 b = {} 2 b = a 当我们输出b时,可以看到a和b直观上看好像是相等了 按照常理,我们会认为a和b现在是两个值相等的字典,如果我们对其中一个操作,另外一个应该不会受到影响才对,所以我们试一下: 我们尝试删除b

python之深浅拷贝(基础四)

第六章python之深浅拷贝(基础四) 6.1 小数据池 小数据池就是Python中一种提高效率的方式,固定数据类型使用同一个内存地址 小数池 -- 支持: str,int,bool a = 1 b = 1 id 查看空间的内存地址 获取开辟空间的一种地址 print(id(a)) print(id(b)) 小数据池数字支持范围: -5 ~ 256 *记住 a = 300 b = 300 print(id(a)) print(id(b)) 代码块: 一个文件,一个模块,一个函数,一个类,终端中每

【python之路13】python的深浅拷贝

深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import copy # ######### 数字.字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 赋值 ## n2 = n1 print(id(n2)) # ## 浅拷贝 ## n2 = copy.copy(

python 赋值 深浅拷贝

深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import copy # ######### 数字.字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 赋值 ## n2 = n1 print(id(n2)) # ## 浅拷贝 ## n2 = copy.copy(

python笔记--深浅拷贝

深浅拷贝 1.对于数字.字符串和元组而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址,例如: >>> n1=123 >>> import copy >>> n2=n1    #赋值 >>> print(id(n2)) 31427456 >>> print n2 123 >>> n2=copy.copy(n1)    #浅拷贝 >>> print(id(n2)) 314

Python 的深浅拷贝 终于明白了

python 深浅拷贝不之前一直不太理解,只是概念性的理解像 1,2 所说,敲完下面代码希望你可以理解. 1.copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 >>> import copy >>> l1 = [1,3,5,['a','b','c']] >>> a = l1 >>> b = copy.copy(a) # 浅拷贝 >>>

我要学python之深浅拷贝原理

前言 在c++中参数传递有两种形式:值传递和引用传递.这两种方式的区别我不在此说,自行补上,如果你不知道的话.我先上python代码,看完我们总结一下,代码如下: # copy module import import copy # number and string a = 12 a1 = a a2 = copy.copy(a) a3 = copy.deepcopy(a) # look addr print("==========number=======") print(id(a)

Python入门-深浅拷贝

首先我们在这里先补充一下基础数据类型的一些知识: 一.循环删除 1.前面我们学了列表,字典和集合的一些操作方法:增删改查,现在我们来看一下这个问题: 有这样一个列表: lst = ['周杰伦','周润发','周星驰','刘德华'] 如果现在要求我们删除带'周'的元素,我们下意识会这样做: lst = ['周杰伦','周润发','周星驰','刘德华'] for i in lst: if '周' in i: lst.remove(i) print(lst) #['周润发', '刘德华'] 但是结果却

Python的深浅拷贝

Python深浅拷贝 一丶引言 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 针对该列表 11 = ['a','b','c',['d','e','f']] 一般有三种方法,分别为:拷贝(赋值).浅拷贝.深拷贝 注意:拷贝/浅拷贝/深拷贝 都是针对数据可变类型数据而言的 1.1丶可变or不可变 id不变值可变,即在原值的基础上修改,则为可变数据类型:值变id也变,即重新申请一个空间放入新值,则