小整数对象池地址引用问题以及python客户端和pycharm运行结果比较

本文探讨了Python中整数对象池的工作原理,比较了在Python客户端和PyCharmIDE中,给变量赋值同一数值时对象创建和内存引用的不同行为。

小整数对象池地址引用问题以及python客户端和pycharm运行结果比较

Python中,有一段特殊的整数,它们经常在python中被使用到,为了防止重复创建导致内存的增加,在python启动时,事先已经创建好了这些对象,放入到小整数对象池中,供开发者使用。当给变量赋值-5到256之间的数值时,其本质是对小整数对象池中对象的引用。

#创建两个变量,都是256(在小整数对象池中),可以看到a,b两个变量的id是一样的,赋值的过程即是对对象256内存id的引用过程
a = 256
b = 256
print(id(a),id(b))
1965754272 1965754272

#当给变量赋值不在小整数对象池中的数字(257)时,可以看到a,b的id是不一样的,此时赋值的过程即是对象创建的过程
#a先申请一个内存id,创建257对象;之后b再申请一个内存,再创建一个257对象
a = 257
b = 257
print(id(a),id(b))
67005712 67006128

#同上,-5与256一样,在小整数对象池中,变量id也是一样的
a = -5 
b = -5 
print(id(a),id(b))
1965750096 1965750096

#同上,-6与257不在小整数对象池中,变量id不一样
a = -6
b = -6
print(id(a),id(b))
67006208 67006176

在进行赋值操作时,我们会发现当给不同的变量赋值同样的数据时,代码写成一行与多行的效果是不一样的,如下:

#分别给变量a,b赋值1000,打印id可以看到两个内存地址是不一样的,写成多行,是创建了多个对象。
a = 1000
b = 1000
print(id(a), id(b))
67005872 67005712

#当将代码写成一行是,我们会发现变量a,b的内存id是一样的,说明只创建了一个对象
#当对变量进行赋值时,如果写成一行,python会自动识别需要创建几个对象,之后将变量指向相应对象的内存id,这样会减少对象的重复创建以及占用内存。
a, b = 1000, 1000
print(id(a), id(b))
67006208 67006208

#同理:
a = (1, 2, 3)
b = (1, 2, 3)
print(id(a), id(b))
67960328 67988456

a, b = (1, 2, 3), (1, 2, 3)
print(id(a),id(b))
67960456 67960456

注意:上述结果是直接在python客户端中运行得到的!!!

如果在IDE中例如pyCharm中运行的结果会不同,如下图所示

# 在pyCharm中,分别给变量a,b赋值1000,打印id可以看到两个内存地址是一样的,写成多行,也只是创建了一个对象。
a = 1000
b = 1000
print(id(a), id(b))
2188144172016 2188144172016

# 在pyCharm中,当将代码写成一行时,与写成多行的结果相同,说明只创建了一个对象
# 当对变量进行赋值时,pyCharm会自动识别需要创建几个对象,之后将变量指向相应对象的内存id,这样会减少对象的重复创建以及占用内存。
a, b = 1000, 1000
print(id(a), id(b))
2063333546992 2063333546992

# 同理:
a = (1, 2, 3)
b = (1, 2, 3)
print(id(a), id(b))
2076587043776 2076587043776


a, b = (1, 2, 3), (1, 2, 3)
print(id(a), id(b))
2149548862400 2149548862400
<think>我们使用PyCharm编写一个简单的程序,该程序可以输入两个数字,然后进行加减乘除运算并显示结果。根据引用[1]中的例子,我们知道需要从客户端(用户)获取输入,并且输入的是字符串,需要转换为数字类型(如float)才能进行运算。同时,引用[3]中提到了一些关于操作符栈的内容,但我们的需求比较简单,直接进行运算即可。步骤:1.提示用户输入两个数字(注意:输入的是字符串,需要转换为浮点数)2.进行加、减、乘、除四种运算3.打印输出结果,格式化显示注意:除法运算中,如果除数为0,需要处理异常,避免程序崩溃。我们将编写一个简单的控制台程序。代码示例:</think>以下是一个使用 PyCharm 编写的 Python 程序示例,实现两个数字的加减乘除运算: ```python # 输入两个数字并进行算术运算 num1 = float(input("请输入第一个数字: ")) num2 = float(input("请输入第二个数字: ")) # 执行四则运算 addition = num1 + num2 subtraction = num1 - num2 multiplication = num1 * num2 # 除法处理除数为零的情况 if num2 != 0: division = num1 / num2 else: division = "未定义(除数不能为零)" # 输出格式化结果 print("\n运算结果:") print(f"{num1} + {num2} = {addition}") print(f"{num1} - {num2} = {subtraction}") print(f"{num1} × {num2} = {multiplication}") print(f"{num1} ÷ {num2} = {division}") ``` ### 代码说明: 1. **输入处理**: - 使用 `input()` 获取用户输入 - 通过 `float()` 将输入转换为浮点数[^1][^2] 2. **运算实现**: - 加法:`num1 + num2` - 减法:`num1 - num2`(参考需求中的减法实现[^1]) - 乘法:`num1 * num2`(使用 `*` 运算符[^2]) - 除法:添加了除零保护逻辑[^3] 3. **输出展示**: - 使用 f-string 格式化输出结果 - 清晰展示每种运算的表达式结果 ### 使用示例: ``` 请输入第一个数字: 8 请输入第二个数字: 2 运算结果: 8.0 + 2.0 = 10.0 8.0 - 2.0 = 6.0 8.0 × 2.0 = 16.0 8.0 ÷ 2.0 = 4.0 ``` ### 注意事项: 1. 程序会捕获非数字输入的错误(如需增强健壮性可添加 `try-except`) 2. 除法运算已处理除数为零的特殊情况 3. 结果保留浮点数精度(如需整数结果可使用 `int()` 转换) 在 PyCharm运行时: 1. 新建 Python 文件(如 `calculator.py`) 2. 粘贴上述代码 3. 右键选择 "Run" 执行程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值