生成器随写,深浅拷贝随写

mygenerator=[value*2   for value in range(4)]
print(mygenerator)

mygenerator=(value*2   for value in range(4))
print(mygenerator)

当[]变成()时,mygenerator由列表,变成了生成器

def  fibonacci(num):
    a=0
    b=1
    currnet_index=0
    while currnet_index<num:
        result=a
        a,b=b,a+b
        currnet_index+=1
        yield result
f=fibonacci(10)
for value in f:
    print(value)

这里变量交换比较有意思 python是可以直接交换的,a,b=b,a+b,而且是可以运算后交换

同时和递归写法斐波那契数列比较,运行速度会快很多

# 1,1,2,3,5,8,13,21,34,55,试判断数列第十个数是哪个?
def fabonacci(n):
    ''' n为斐波那契数列 '''
    if n <= 2:
        ''' 数列前两个数都是1 '''
        v = 1
        return v # 返回结果,并结束函数
    v = fabonacci(n-1)+fabonacci(n-2) # 由数据的规律可知,第三个数的结果都是前两个数之和,所以进行递归叠加
    return v  # 返回结果,并结束函数
print(fabonacci(10)) # 55    调用函数并打印结果

拷贝无论深浅,都是针对可变类型。

import copy
mylist1=[1,3,[4,5]]
mylist2=copy.copy(mylist1)
print("1----",id(mylist1),"2----",id(mylist2))
mylist1.append(6)
print(mylist1,mylist2)
print("1----",id(mylist1[2]),"2----",id(mylist2[2]))


1---- 3093998009032 2---- 3093998009288
[1, 3, [4, 5], 6] [1, 3, [4, 5]]
"1----",id(mylist1[2]),"2----",id(mylist2[2])地址是一样的
1---- 3093998008968 2---- 3093998008968
import copy
mylist1=[1,3,[4,5]]
mylist2=copy.deepcopy(mylist1)
print("1----",id(mylist1),"2----",id(mylist2))
mylist1.append(6)
print(mylist1,mylist2)
mylist1[2].append(88)
print("1----",id(mylist1[2]),"2----",id(mylist2[2]))
print(mylist1,mylist2)

1---- 2824254126984 2---- 2824254127240
[1, 3, [4, 5], 6] [1, 3, [4, 5]]
"1----",id(mylist1[2]),"2----",id(mylist2[2])地址是不一样的
1---- 2824254126920 2---- 2824254137672
[1, 3, [4, 5, 88], 6] [1, 3, [4, 5]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值