在python中赋值的含义是,在python中正确的赋值语句

  在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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: