python中x=x+1是合法语句_Python语句x = x + 1如何实现? - python

在C语言中,语句x = x + 1将更改为x分配的同一内存中的内容。但是在Python中,由于变量可以具有不同的类型,所以=左侧和右侧的x可以具有不同的类型,这意味着它们可以引用不同的内存。如果是这样,在x将其引用从旧内存更改为新内存之后,可以通过垃圾回收机制回收旧内存。如果是这样,以下代码可能会多次触发垃圾回收过程,因此效率非常低:

for i in range(1000000000)

i=i+1

我的猜测正确吗?

更新:

我需要更正代码中的错字,以使问题更清楚:

x=0

for i in range(1000000000)

x=x+1

@SvenMarnach,您的意思是如果未激活垃圾回收,则整数0、1、2,...,999999999(x曾经被称为标签)都存在于内存中?

参考方案

id可用于跟踪对象的内存“分配”。应该谨慎使用它,但是在这里我认为它很有启发性。 id有点像c指针-也就是说,有些与对象在内存中的“位置”有何关系。

In [18]: for i in range(0,1000,100):

...: print(i,id(i))

...: i = i+1

...: print(i,id(i))

...:

0 10914464

1 10914496

100 10917664

101 10917696

200 10920864

201 10920896

300 140186080959760

301 140185597404720

400 140186080959760

401 140185597404720

...

900 140186080959760

901 140185597404720

In [19]: id(1)

Out[19]: 10914496

小整数(<256)被缓存-即整数1,一旦创建就被“重用”。

In [20]: id(202)

Out[20]: 10920928 # same id as in the loop

In [21]: id(302)

Out[21]: 140185451618128 # different id

In [22]: id(901)

Out[22]: 140185597404208

In [23]: id(i)

Out[23]: 140185597404720 # = 901, but different id

在此循环中,前几次迭代创建或重用小整数。但是似乎在创建更大的整数时会“重用”内存。它可能不是完整的垃圾回收,但是对代码进行了某种优化,以避免不必要的内存使用。

通常,由于Python程序员不关注这些细节。编写干净可靠的Python代码。在此示例中,在循环中修改迭代变量是一种不好的做法(即使只是示例)。

在Python和C++之间传输数据而无需写入Windows和Unix文件 - python

我有预先存在的python和C ++文件,其中python文件定义了许多点,而C ++代码利用其现有库进行了所需的计算。最终产品是C ++代码写入的文件。我正在寻找一种在python中获取2000点列表的方法,将其传递给函数,然后执行所有C ++代码并输出我需要的文件。其他注意事项。这必须是可以在Linux或Windows机器上工作的东西,并且最少安装新插件…如何锁定终端运行的perl,obj c,c++,python和ruby等脚本的源代码? - python

我想出售我在perl,obj c,c ++,python,ruby,bash,php等中制作的脚本等它们都在终端中运行。 (Linux)如何锁定源代码,以便无需人们访问源代码即可分发我的脚本..?换句话说,如何将在Terminal中运行的程序的源代码锁定,以便人们可以使用该程序(如果该代码已下载到他们的Linux机器上,但他们无法访问实际的源代码)?例:ex…在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java

我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…Python MySQLdb“错误:已安装Microsoft Visual C++ 14.0” - python

我正在尝试连接到MySql数据库并将其数据用于一些代码,尽管我正在使用pip install mysqlclient 它给我一个错误说明:  “错误:需要Microsoft Visual C ++ 14.0。  Visual C ++生成工具”:  http://landinghub.visualstudio.com/visual-cpp-build-too…Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值