python的学习:导入模块路径、重新加载路径、 is ==、深拷贝和浅拷贝

python导入模块路径、重新加载路径


#encoding=utf-8
#import相当于C C++中的include
import sys
print(sys.path)#引入当前的路径
'''
['E:\\language\\sublime\\python', 'D:\\Program Files\\python3.5\\python35.zip',
 'D:\\Program Files\\python3.5\\DLLs', 'D:\\Program Files\\python3.5\\lib',
  'D:\\Program Files\\python3.5', 'D:\\Program Files\\python3.5\\lib\\site-packages']
'''
#假如引用了里面的内容,则按照路径依次查找,若找到后停止查询,若当前未找到,则继续向
#下查找,到最后找不到fail
#若要添加一个路径,可以在path列表中添加
sys.path.append("/home")
print(sys.path)
'''
['E:\\language\\sublime\\python', 'D:\\Program Files\\python3.5\\python35.zip',
 'D:\\Program Files\\python3.5\\DLLs', 'D:\\Program Files\\python3.5\\lib',
  'D:\\Program Files\\python3.5', 'D:\\Program Files\\python3.5\\lib\\site-packages', '/home']
'''

#搜索的路径就是sys.path,可以通过修改这里来改变搜索的路径
#../上一路径
#

#对模块重新加载
#若写了一个模块,import调用,在调用过程中,模块中的内容发生了改变
#但是调用的内容不会发送改变,需要重新reload
import importTest
importTest.testPrint()

#在python3中进行了修改,在这里立刻发生了改变,但是在Linux平台上修改没有立刻发生改变
from imp import *#导入reload,使用imp模块中的reload
reload(importTest)#重新加载修改的模块
importTest.testPrint()

is和==的区别

#在python中避免发生循环调用
#is ==的区别
#==是判断两个对象是否相等  is 判断是否同一个引用
#is比较两个引用是否指向了同一个对象(引用比较)
a=[1,2,3]
b=[1,2,3]
c=a
print(id(a))#18222344
print(id(b))#18219912
print(id(c))#18222344
print(a==b)#True
print(a==c)#True
print(a is b)#False
print(a is c)#True

浅拷贝和深拷贝、copy与deepcopy的区别

#浅拷贝是对于一个对象的顶层拷贝
#即:拷贝了引用,并没有拷贝内容
a=[1,2,3]
d=[4,5,6]
b=a #浅拷贝,a,b都指向同一块内存,只是将a的引用给了b,并没有将a的内容给b
#a中的内容发生了改变,b跟着改变

import copy
c=copy.deepcopy(a)#深拷贝

print(id(a))#10882312
print(id(b))#10882312
print(id(c))#18598536
a.append(22)#
print(a)#[1, 2, 3, 22]
print(b)#[1, 2, 3, 22]
print(c)#[1, 2, 3]

#在一个列表中
f=[a,d]
g=f
e=copy.deepcopy(f)#深拷贝拷贝了a,d的值
h=copy.copy(f)#这个拷贝只拷贝了一层,另外拷贝了a,d的引用
print(id(f))#18863048
print(id(g))#18863048
print(id(e))#18863560
print(id(h))#18454344
a.append(100)
print(f)#[[1, 2, 3, 22, 100], [4, 5, 6]]
print(g)#[[1, 2, 3, 22, 100], [4, 5, 6]]
print(e)#[[1, 2, 3, 22], [4, 5, 6]]
print(h)#[[1, 2, 3, 22, 100], [4, 5, 6]]

元组的copy,没有发生拷贝

#使用copy模块的copy功能时,会根据当前拷贝的数据类型是可变还是不可变类型有不同的处理方式
#在一个元组中中
a=[1,2,3]
d=[4,5,6]
f=(a,d)
g=f
e=copy.deepcopy(f)#深拷贝拷贝了a,d的值
h=copy.copy(f)#因为元组的不可变性,在拷贝中先判断是否可变,这里没有发生拷贝 ,h指向f
print(id(f))#12081736
print(id(g))#12081736
print(id(e))#12081992
print(id(h))#12081736
a.append(100)
print(f)#([1, 2, 3, 100], [4, 5, 6])
print(g)#([1, 2, 3, 100], [4, 5, 6])
print(e)#([1, 2, 3], [4, 5, 6])
print(h)#([1, 2, 3, 100], [4, 5, 6])







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚努力的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值