0
点赞
收藏
分享

微信扫一扫

python 变量和对象

暮晨夜雪 2022-03-19 阅读 36
python

C变量是值的容器,用于保存相应的值。

Python 也有变量和值的概念,但是值是独立的对象,而变量是用来标识(引用)对象的。对象有类型,不同对象的大小也不同,我们不需要知道对象的大小,只需要根据对象的类型正确使用,如果某个对象不用了,python会有回收机制将其回收。

id(1)
>>140723104982832

a=1
id(a)
>>140723104982832

变量的赋值和共享:

两个变量之间进行赋值,等同于两个变量共享(引用)同一个对象

b=a ##不可变对象情况
id(b)

>>140723104982832


c=[1,2,3] ##列表是一个可变对象
d=c 
id(c)
>>3113652251584

id(d)
>>3113652251584

c.append(4)
c
>>[1, 2, 3, 4]

id(c)
>>3113652251584

d
>>[1, 2, 3, 4]

id(d)
>>3113652251584

c=c+[5] #对列表进行+操作会生成新对象
id(c)
>>3113652144000

z=[1,2,3,4]
id(z)
>>3113652295232

拷贝和共享

表拷贝是构造另一个“同样”的表,但是只拷贝表的一层,如果表中的元素是不可变对象那么共享元素不会带来问题,如果拷贝表中的元素是可变对象,则需要深度拷贝。

a1=[[i+j for i in range(3)] for j in range(3)]
a1
>>[[0, 1, 2], [1, 2, 3], [2, 3, 4]]

a2=a1.copy()

a1[0][0]=5
a1
>>[[5, 1, 2], [1, 2, 3], [2, 3, 4]]

a2
>>[[5, 1, 2], [1, 2, 3], [2, 3, 4]]

##解决方案 一层层复制
a1=[[i+j for i in range(3)] for j in range(3)]
a3=[[x for x in vec] for vec in a1]
a3
>>[[0, 1, 2], [1, 2, 3], [2, 3, 4]]

##深度copy
import copy
a4=copy.deepcopy(a1)
a4
>>[[0, 1, 2], [1, 2, 3], [2, 3, 4]]

a1[0][0]=5
a1
>>[[5, 1, 2], [1, 2, 3], [2, 3, 4]]

a3
>>[[0, 1, 2], [1, 2, 3], [2, 3, 4]]

a4
>>[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
举报

相关推荐

0 条评论