Python中类型的可变和不可变、变量赋值浅复制深复制后变量id的变化、小整数、拆包应用交换两个变量的值和Python中几种输出方式

🤵‍♂️ 个人主页: Redamancy_06
📒 系列专栏:《在线编程-Python篇》
🌐推荐一款找工作神器网站:《牛客网练习入口》|笔试题库|面试经验|实习招聘内推|
🐋 希望大家多多支持😘一起进步呀!
📝 如果文章对你有帮助的话,欢迎评论 💬点赞 👍收藏 📂加关注

在这里插入图片描述

一、类型的可变和不可变

类型的可变与不可变: 在不改变变量引用的前提下,能否改变变量中引用中的数据,如果能改变是可变类型, 如果不能改变,是不可变类型
int float bool str list tuple dict
不可变类型: int float bool str tuple(一部分)
可变类型: list dict tuple(一部分)

# int型的地址改变了,因此是不可变类型,float、str和bool也一样
a = 10
print(id(a))  # 140722097784768
a = 20
print(id(a))  # 140722097785088
# list 列表地址没有改变,是可变类型,字典dict也一样
my_list = [1, 2]
print(id(my_list))  # 2359877309568
my_list.append(3)
print(id(my_list))  # 2359877309568

在这里插入图片描述

注意:在代码中不管值是多少都是true,在交互终端中,小整数的概念小整数默认范围-5~255
如果是小整数使用相同的引用地址如果不是,开辟新的内存

二、变量赋值浅复制深复制后变量id的变化

1.不可变对象,数值,字符串,元组(元素没有可变对象),其同样值赋值给两个变量,浅复制,深复制,其变量id一致
2.可变对象,列表,字典,集合,元组(元素有可变对象),其同样赋值给两个变量,浅复制,深复制,其变量id不一致

import copy
print('·' * 25 + '数值型' + '·' * 25)
a = 5
b = 5
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
a = -999999999
b = -999999999
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
a = 9999999999
b = 9999999999
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
a = 5.2
b = 5.2
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
print('·' * 25 + '字符串型' + '·' * 25)
a = 'redamancy'
b = 'redamancy'
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
a = 'redamancy52_'
b = 'redamancy52_'
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
a = 'redamancy52&'
b = 'redamancy52&'
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
print('·' * 25 + '元组型' + '·' * 25)
a = (15, 25, 35, )
b = (15, 25, 35)
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # True
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # True
a = (15, 25, 35, [15, 25, 35])  # 不可变的元组里面有可变元素
b = (15, 25, 35)
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # False
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # True
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # False
print('·' * 25 + '列表型' + '·' * 25)
a = [15, 25, 35]
b = [15, 25, 35]
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # False
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # False
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # False
print('·' * 25 + '字典型' + '·' * 25)
a = {'name': 'redamancy'}
b = {'name': 'redamancy'}
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # False
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # False
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # False
print('·' * 25 + '集合型' + '·' * 25)
a = {'age'}
b = {'age'}
c = copy.copy(a)
d = copy.deepcopy(a)
print('a和b通过=赋值后为:{},a和b的id是否一致:{}'.format(a, a is b))  # False
print('c通过浅拷贝a后值为:{},a和c的id是否一致:{}'.format(c, a is c))  # False
print('c通过深拷贝a后值为:{},a和d的id是否一致:{}'.format(d, a is d))  # False

结果为:
a和b通过=赋值后为:5,a和b的id是否一致:True
c通过浅拷贝a后值为:5,a和c的id是否一致:True
c通过深拷贝a后值为:5,a和d的id是否一致:True
a和b通过=赋值后为:-999999999,a和b的id是否一致:True
c通过浅拷贝a后值为:-999999999,a和c的id是否一致:True
c通过深拷贝a后值为:-999999999,a和d的id是否一致:True
a和b通过=赋值后为:9999999999,a和b的id是否一致:True
c通过浅拷贝a后值为:9999999999,a和c的id是否一致:True
c通过深拷贝a后值为:9999999999,a和d的id是否一致:True
a和b通过=赋值后为:5.2,a和b的id是否一致:True
c通过浅拷贝a后值为:5.2,a和c的id是否一致:True
c通过深拷贝a后值为:5.2,a和d的id是否一致:True
·························字符串型·························
a和b通过=赋值后为:redamancy,a和b的id是否一致:True
c通过浅拷贝a后值为:redamancy,a和c的id是否一致:True
c通过深拷贝a后值为:redamancy,a和d的id是否一致:True
a和b通过=赋值后为:redamancy52_,a和b的id是否一致:True
c通过浅拷贝a后值为:redamancy52_,a和c的id是否一致:True
c通过深拷贝a后值为:redamancy52_,a和d的id是否一致:True
a和b通过=赋值后为:redamancy52&,a和b的id是否一致:True
c通过浅拷贝a后值为:redamancy52&,a和c的id是否一致:True
c通过深拷贝a后值为:redamancy52&,a和d的id是否一致:True
·························元组型·························
a和b通过=赋值后为:(15, 25, 35),a和b的id是否一致:True
c通过浅拷贝a后值为:(15, 25, 35),a和c的id是否一致:True
c通过深拷贝a后值为:(15, 25, 35),a和d的id是否一致:True
a和b通过=赋值后为:(15, 25, 35, [15, 25, 35]),a和b的id是否一致:False
c通过浅拷贝a后值为:(15, 25, 35, [15, 25, 35]),a和c的id是否一致:True
c通过深拷贝a后值为:(15, 25, 35, [15, 25, 35]),a和d的id是否一致:False
·························列表型·························
a和b通过=赋值后为:[15, 25, 35],a和b的id是否一致:False
c通过浅拷贝a后值为:[15, 25, 35],a和c的id是否一致:False
c通过深拷贝a后值为:[15, 25, 35],a和d的id是否一致:False
·························字典型·························
a和b通过=赋值后为:{‘name’: ‘redamancy’},a和b的id是否一致:False
c通过浅拷贝a后值为:{‘name’: ‘redamancy’},a和c的id是否一致:False
c通过深拷贝a后值为:{‘name’: ‘redamancy’},a和d的id是否一致:False
·························集合型·························
a和b通过=赋值后为:{‘age’},a和b的id是否一致:False
c通过浅拷贝a后值为:{‘age’},a和c的id是否一致:False
c通过深拷贝a后值为:{‘age’},a和d的id是否一致:False

三、小整数

所谓的小整数,就是[-5,256]之间的整数,顾头又顾腚~这些整数呢,在Python中存储的时候,为了提高运行的效率,只存储一个,也就是说多个变量引用相同的小整数的时候,所有的变量都指向了同一个内存空间,它们在内存中的地址是一样的,或者说它们就是同一个。

四、拆包应用交换两个变量的值

将a、b的值做交换方法一和方法二是常用的方法,方法三是利用组包和拆包实现的交换

a = 10
b = 20

# 方法一:
# c = a
# a = b
# b = c
# print(a, b)

# 方法二: +/-   */÷
# a = a + b  # a 30
# b = a - b  # 10
# a = a - b  # 20
# print(a, b)

# 方法三, python中的使用 组包和拆包
a, b = b, a
print(a, b)

在这里插入图片描述

def func(*args, **kwargs):
    print('args', args)
    print('kwargs', kwargs)


my_list = [1, 2, 3, 4, 5, 6]
my_dict = {'a': 7, 'c': 8, 'b': 9, 'd': 10}

func(my_list)  # 将列表作为一个数据进行传递
print("`" * 25)
func(*my_list)  # 将列表中的每一个数据作为位置参数进行传递, 拆包
print("`" * 25)
func(my_dict)  # 将my_dict 作为一个位置实参进行传递
print("`" * 25)
func(*my_dict)  # 将my_dict中的key 作为位置实参进行传递
print("`" * 25)
func(**my_dict)  # 将my_dict中键值对作为关键字实参进行传递

在这里插入图片描述

五、Python中几种输出方式

1、加号拼接

str1 = 'redamancy'
print("你的名字是:" + str1)  # 你的名字是:redamancy

2、.format格式

a = 1
b = 2
print("a的值为:{},b的值为:{}".format(a, b))  # a的值为:1,b的值为:2

3、print(f “{}”) 的用法

a = 1
b = 2
print(f"a的值为:{a},b的值为:{b}")  # a的值为:1,b的值为:2

4、输出其他类型的方法

1.输出百分比方法

a = 1.8
print('数值为:%.0f%%' % (a))  # 数值为:2%
print('数值为:%.1f%%' % (a))  # 数值为:1.8%
print('数值为:%.2f%%' % (a))  # 数值为:1.80%

2.输出字符串方法

str1 = 'redamancy'
print('你的名字是:%s' % (str1))

3.输出整形方法

a = 2
print('数值为:%d' % (a))  # 数值为:2

4.输出浮点型方法

a = 2.8
print('数值为:%f' % (a))  # 数值为:2.800000

5.扩展知识

字符含义
%s字符串
%d有符号十进制整数,%06d表示输出的整数显示位数字,不足的地方使用0补全
%f浮点数,一般输出的时候有6位小数,%.02f表示小数点后只显示两位
%%输出%

python是一种简单的语言,但实践才是最好的学习方式;因为简单,所以上手快;因此是语言,索引需要实践。“纸上谈来终觉浅”,学习一门编程语言,最重要的还是要亲手编程,这个题单正是使用这种手把手指导的方式,教会你亲手编写Python代码,让你实现从萌新到大佬的跨越。
点击链接赶紧练习起来吧:https://www.nowcoder.com/link/pc_csdncpt_red_python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redamancy_06

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值