栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python可变和不可变对象

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python可变和不可变对象

python可变和不可变对象
  • 不可变类型
    • 不可变种类
    • 指向不可变对象的变量改变value
  • 可变类型
    • 可变类型种类
    • 指向可变对象的变量改变value

  • 可变、不可变是指变量所引用的内存中的那块空间是否可以被改变。
  • 当改变变量value时,变量原指定内存地址的值可以被改变,则为可变类型,否则为不可变类型。
  • 改变value值的同时,使用id()函数查看变量id是否变化即可判断是什么类型。
不可变类型 不可变种类
  • number,str,tuple,bool
  • 当改变变量value时,重新分配一块内存空间,使变量指向新的地址。
指向不可变对象的变量改变value
  • 不可变对象+,+=操作都会重新分配内存空间。
a= "nightingale"
print(a, id(a))
a +="s"
print(a, id(a))
result:
nightingale 140139369457712
nightingales 140139369458352
# 变量引用的地址发生了变化,a引用了重新开辟了的新空间。

a = (1, 2, 3)
b = a
print(a, b, id(a),id(b))
 
a = a + (4,5)
print(a, b, id(a),id(b))
result:
(1, 2, 3) (1, 2, 3) 140446447493624 140446447493624
(1, 2, 3, 4, 5) (1, 2, 3) 140446446797488 140446447493624

可变类型 可变类型种类
  • list,dictionary,set
指向可变对象的变量改变value
  • 改变变量值,变量所引用的内存中的地址不会被改变,原地址中所存储的内容发生变化。
  • 指向可变对象的变量直接重新赋值,则地址会发生改变。
  • +=不重新创建对象,还在原地址上更改,+会重新创建对象。
a=[1,2,3]
print(a, id(a))
a+=[4,5,6]
print(a, id(a))
result:
[1, 2, 3] 140153179393544
[1, 2, 3, 4, 5, 6] 140153179393544
# +=在原地址更改内容

a=[1,2,3]
print(a, id(a))
a=[4,5,6]
print(a, id(a))
result:
[1, 2, 3] 140325380423176
[4, 5, 6] 140325581106376
# 直接赋值,重新创建对象,原变量引用地址发生改变。

a = [1, 2, 3]
b = a
print(a, b, id(a),id(b))
a = a + [4, 5]
print(a, b, id(a),id(b))
result:
[1, 2, 3] [1, 2, 3] 139918170480072 139918170480072
[1, 2, 3, 4, 5] [1, 2, 3] 139918191472200 139918170480072
# +重新创建对象

[1, 2, 3] [1, 2, 3] 140366083399112 140366083399112
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] 140366083399112 140366083399112
result:
a = [1, 2, 3]
b = a
print(a, b, id(a),id(b))
 
a += [4, 5]
print(a, b, id(a),id(b))

def test(age, name):
    print("test-1", age, name, id(age), id(name))
    age = 28
    name = "Jack"
    print("test-2", age, name, id(age), id(name))
age = 13
name = "Mick"
print(age, name, id(age), id(name))
test(age, name)
print(age, name, id(age), id(name))
result:
13 Mick 140661410359584 140661412089392
test-1 13 Mick 140661410359584 140661412089392
test-2 28 Jack 140661410360064 140661208499904
13 Mick 140661410359584 140661412089392
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号