python3:变量赋值,可变对象vs不可变对象,浅拷贝vs深拷贝

一.变量的赋值

在python中,都是将“对象的引用(内存地址)”赋值给变量的。示例:

x = 3.14
y = x
print(id(x))
print(id(3.14))
print(id(y)) 

运行结果:

在语句x = 3.14中,做了两件事:

第一步:创建了一个浮点型的对象

第二步:将该对象的引用(“对象的引用”可以理解为对象的内存地址)赋值给名为x的变量,创建变量x(可以看到3.14,x的id(内存地址)都是一样的)。

注:

1.在Python中,每个变量在使用前都必须赋值,变量是在赋值的那一刻被创建的。

2.在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

在语句y = x中,因为3.14这个对象之前已经创建了,所以这里其实只做一件事:

将对3.14这个对象的引用赋值给名为y的变量,创建变量y(可以看到3.14, x, y的id(内存地址)也是一样的).

有人喜欢把给变量赋值比喻成“贴标签”,把x, y这两个标签贴到3.14这个对象上。

二.可变对象 vs 不可变对象

可变对象:允许对自身进行修改;不可变对象:不允许对自身内容进行修改,如果修改了,那么它就不是原来的对象了——可以用id值判断。示例:

my_list:增加一个值后id不变,说明还是原来的对象。my_tuple无法操作修改。

Python3 中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

Python3 的六个标准数据类型中:

  • 不可变数据类型(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据类型(3 个):List(列表)、Dictionary(字典)、Set(集合)

注:bool(布尔)也是不可变数据类型。

四.浅拷贝 vs 深拷贝

1.原则

浅拷贝和深拷贝之间的区别只适用于容器对象(包含其他对象的对象,如列表或类实例)。

对于非容器对象没有区别,都是对象拷贝,相当于重新赋值,生成一个新的对象。

2.浅拷贝:引用拷贝

shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.

上面是官方文档内容,主要包含两个意思:

(1)浅拷贝会创建一个新的容器对象(compound object)

 

(2)对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)。

(3)会产生浅拷贝效果的操作

  • 使用切片[:]操作
  • 使用工厂函数(如list/dir/set)
  • 使用copy模块中的copy()函数

3.深拷贝:对象拷贝。

  • deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.

上面是官方文档内容,主要包含两个意思:

(1)创建一个新的容器对象。

(2)对于对象中的元素,深拷贝都会重新生成一个新的对象。

参考资料

参考资料写得更详细,更好。

[1] 菜鸟教程-Python3 基本数据类型:http://www.runoob.com/python3/python3-data-type.html

[2]田小计划-图解Python深拷贝和浅拷贝:https://www.cnblogs.com/wilber2013/p/4645353.html

[3]python官方文档-内建类型:https://docs.python.org/3/library/stdtypes.html#dict

[4]python官方文档-拷贝:https://docs.python.org/3.7/library/copy.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值