Python四则运算和赋值运算的一些问题

学习时间复杂度时, 一些问题的描述和记录。

# 列表的添加中两个操作
def t1():
    li = []
    for i in range(10000):
        li = li + [i]



def t2():
    li = []
    for i in range(10000):
        li += [i]

上述代码的结果是一致的,但是两个函数计算时所用的时间完全不是一个数量级的。

原因是列表在使用四则运算时, li的内存地址每次都会重新的建立并被赋值, 而赋值运算则一直使用第一个li的内存地址。

由此又有:

str1 = 'a'
print(id(str1))
str1 = str1 + 'b'
print(id(str1))

str2 = 'a'
print(id(str2))
str2 += 'b'
print(id(str2))


def test():
    str3 = 'a'
    print(id(str3))


test()



# 结果
4755896
32050176
4755896
32081152
4755896

可以发现, 字符串进行运算时, 无论是四则运算还是赋值运算都会开辟新的内存空间, 但是声明时的内容始终指向同一内存空间, 因此声明字符串后, 运算后, 原始字符串并没有从内存中回收, 而后面使用到时, 都会指向新的引用。

 

那如果再次进行运算呢?

str1 = 'a'
print(id(str1))
str1 = str1 + 'b'
print(id(str1))
str1 = str1 + 'c'
print(id(str1))

str2 = 'a'
print(id(str2))
str2 += 'b'
print(id(str2))
str2 += 'c'
print(id(str2))

# 结果
31297976
41945832
41945832
31297976
41946056
41946056

我们发现, 当引用第一次运算后, 无论是哪一种运算规则都会采用第一次运算时所开辟的内存空间, 原始字符串引用地址依旧如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值