在python中赋值的含义是,在python中正确的赋值语句
内存、赋值、值类型、引用类型
对于不可变对象的赋值,每个实例的内存地址是相同的,因为不可变对象是唯一的。
#不可变不可变对象
a1=你好
a2=你好
id(a1) id(a2)
(2314077154976, 2314077154976)
#可变可变对象
b1=[1,2]
b2=[1,2]
B3=b1[:] #浅层复制
b4=b1
身份证(b1),身份证(b2),身份证(b3),身份证(b4)
(2314077034120, 2314077036104, 2314076292936, 2314077034120)
详细说明
可以看出,对于字符串对象,它直接指向,而对于列表,它指向引用。
对于指向引用的list的数据类型,我们称之为引用类型。在python的基本数据结构中,list、dict和set都是引用类型,是可变的。
对于直接指向的数据类型,我们称之为值类型,是不可变的。int、str、tuple都是值类型。
被引用类型的内存地址
我们用下面的例子来看看引用类型的address属性。
列表1=[1,2,3]
id(列表1)
85548528
1 [0]= one #更改list1中的对象
列表1
[一,二,三] #列表1已更改
id(列表1)
8548528 #内存地址不变
浅拷贝
对于列表和其他变量序列,以下方法都将产生浅层拷贝:
列表2=列表(列表1)
list2=list1[:]
list2=copy.copy(list1)
假设有两层列表对象l1和它的浅层副本l2:
l1=[1,2,3,[44,55],(66,77,88)]
l2=l1[:]
详细说明
链表l1有两层,l1的第一层是[1,2,3,*list,*tuple]。在l1的第一层中添加或删除元素时,L1和l2互不影响。
l1.append(new )
l1、l2
([1,2,3,[44,55],(66,77,88),[new]],
[1, 2, 3, [44, 55], (66, 77, 88)])
但是,二级对象的*列表,他们的家乡地址是一样的。当它们被修改时,将同时影响l1和l2。链表[44,55]的内存地址引用不会改变,所以如果你改变链表[44,55],L1和L2也会被改变。
l1[3]。追加( 66 )
([1,2,3,[44,55, 66],(66,77,88),[new]],
[1, 2, 3, [44, 55, 66], (66, 77, 88)])
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。