时间:2021-05-22
在Python中定义一个数据便在内存中开辟一片空间来存储这个变量的值,这块已经被分配的内存空间便会有一个内存地址。访问这块内存需要用到变量名,变量名实际存储的是变量的地址在内存中的地址,但是使用print()函数得到的确实这块内存中实际的地址。这个就当成规定就好,没必要纠结。
获得变量在内存中的地址,可以使用id()函数。
常规使用
变量之间的赋值其实是把一个变量的内存地址传递给另一个变量,这样两个变量便都指向内存中的同一块空间,因此这两个变量的之是相等的
a = 1b = aprint("a:%d b:%d" % (a,b))print(id(a))print(id(b))结果:a:1 b:11711072016此时如果有第三个变量c的值与a的相等,那么c的地址与a的地址一样。这一点请大家牢记。
a = 1c = 1print("a:%d c:%d" % (a,c))print(id(a))print(id(c))结果:a:1 c:11711072016此时如果修改变量c的值,那么会在内存中新开辟一块内存来存储这个变量,这块新的内存地址将会赋值给c。
a = 1c = 1c = 2print("a:%d c:%d" % (a,c))print(id(a))print(id(c))结果:a:1 c:21711072032基本数据类型作为函数参数
基本数据类型作为函数实参同样是这个道理。
a = 1print(id(a))def func(x): print(id(x)) x = 2 print(id(x)) func(a)结果:1711072016列表、字典等高级数据类型的引用
列表字典等高级数据类型的变量名同样存储的变量的实际地址,一个列表名赋值给另一个变量,那么这两个变量便指向内存中的同一块地址。
list1 = [1,2,3]list2 = list1print(list1,list2)print(id(list1),id(list2))结果:[1, 2, 3] [1, 2, 3]57931896高级数据类型在每集加载进内存的时候内存地址与上一次可能会不同。
此时如果修改list2,也会影响list1的值,但是两个变量在内存中的地址还是不变的。这一点是与基本数据类型不一样的。
list1 = [1,2,3]list2 = list1print(list1,list2)print(id(list1),id(list2))list2.append(4)print(list1,list2)print(id(list1),id(list2)) 结果:[1, 2, 3] [1, 2, 3]43841656[1, 2, 3, 4] [1, 2, 3, 4]43841656此时如果有第三个列表list3的值也是[1,2,3,4],可以推测list3的地址与list1的地址应该是一样的,但是事实并非如此。如果有第三个列表list3的值也是[1,2,3,4],相当于在内存中新开辟一块内存来存储这个值。
list1 = [1,2,3]list2 = list1list3 = [1,2,3]print(list1,list2,list3)print(id(list1),id(list2),id(list3))结果:[1, 2, 3] [1, 2, 3] [1, 2, 3]16775288 16776768可变数据类型与不可变数据类型
在python中哪些是可变数据类型,哪些是不可变数据类型。可变数据类型:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。
用一句话来概括上述过程就是:“python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
对于不可变类型传递值(不会影响原数据)不可变类型对于可变类型传递引用(会影响原数据)不可变类型传递引用python3不可变类型Number(数字)String(
python的数据类型可变不可变1、什么是可变不可变首先说一下什么是Python数据的可变不可变。我们都知道定义变量的时候,是先创建一块内存空间,将值放进去,然
Python中核心的数据类型有哪些?变量(数字、字符串、元组、列表、字典)什么是数据的不可变性?哪些数据类型具有不可变性数据的不可变是指数据不可更改,比如:a=
python中函数参数是引用传递(不是值传递)。对于不可变类型,因变量不能被修改,所以运算时不会影响到变量本身;而对于可变类型来说,函数体中的运算有可能会更改传
学过C#的人都知道string类型,但是string作为一种特殊的引用类型还有一个重要的特征就是恒定性,或者叫不可变性,即Immutable。作为不可变类型,最