python----可变与不可变

python中一切皆对象

不可变

数值类型不可变

a = 1
b = 1 
c = [1,]
a is b ---> True
a is c[0] --->True   

在这里插入图片描述
del a 只是删除了对 --对象1-- 的引用
del b 只是删除了对 --对象1-- 的引用
del c[0] 只是删除了对 --对象1-- 的引用
del c[2:] 只是删除了对 范围索引的引用

d = c[2:]
del d 只是删除了d引用的对象
当一个对象的引用计数为0时,垃圾回收机制回收该对象,释放内存。

查看引用计数
sys.getrefcount(obj)

元组不可变

t = ("a","b","c",["a","f"])
t[0] 只能是 "a" 字符串对象
t[1] 只能是 "b" 字符串对象
。。。
t[3] 只能是 该列表对象,但是列表里面的内容可以变

字符串不可变

s1 = "ab"
s2 = s1 + "c"

s1 is s2 ----> False
id(s1)
id(s2)
完全是两个对象

可变

列表

a = [1,2,3]
a.append(5)
#a对象本身追加了一个元素

赋值:
在这里插入图片描述

追加元素:
在这里插入图片描述
del a[0] :
在这里插入图片描述

字典可变

d = {}
d["name"] = "jack"

集合可变

s = set()
s.add(4)
s.add(5)
s.remove(5)
s.pop()

s.clear() #清空
s.copy() # 浅拷贝

s.update(s1) #更新进s中,同字典
s1 & s2 #交集 返回新集合对象 s1.intersection(s2)
s1 | s2 #并集 s1.union(s2)
s1 - s2 #差集 同s1.difference(s2)

浅拷贝与深拷贝

浅拷贝:python中默认均为浅拷贝,对象不同,但复制的对象中的数据项 是对原来对象中的数据项的引用

深拷贝:两个对象中的数据项是完全独立的
from copy import deepcopy

a = [1,2,3,[1,2]]
b = a.copy() #浅拷贝
a[-1].append(3)
# a==>[1,2,3,[1,2,3]]
print(b)
# b==>[1,2,3,[1,2,3]]

from copy import deepcopy
c = deepcopy(a)
del a[-1][-1]
# a==>[1,2,3,[1,2]]
print(c)
# c==>[1,2,3,[1,2,3]]

 
 
 
 
上一篇:python编码问题

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

laufing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值