关于python中 for循环语句位置顺序的疑问

关于python中 for循环语句位置顺序的疑问
关于python中 for循环语句位置顺序的疑问

两个图片中,变化了二三行的位置顺序,其输出结果大不相同。
alien_0在for语句后可以将指定的alien变为绿色;
alien_0在for语句前,却把所有的alien变为绿色;
为什么会产生这种情况呢?求解答。


回答:

python 对象是以引用的方式存储和传参的。

alien_0 放在循环里面,每次循环都会创建一个新的 alien_0 对象(一共创建 30 个),auto_aliens.append(alien_0) 添加的都是不同对象。

alien_0 放在循环外面,对象只创建 1 次,每次循环添加的都是同一个对象,所以只要改一个,其他全都会变,因为数组里每一个元素都是引用同一个对象。

如果非要放在循环外面,可以每次循环复制一次,即把添加语句改为

auto_aliens.append(alien_0.copy())


回答:

如果不是确定生成了一个新的对象还是原来的对象,可以使用id操作符号进行判断.
id函数可以使用查看python对象的内存地址.

auto_aliens = []

for x in range(0,30):

alien_0 = {'color':'red'}

print(id(alien_0))

auto_aliens.append(alien_0)

结果:

4351848384

4351910248

4351910752

4351910896

4351910968

4351911040

4351911112

4351911184

4351911256

4351911328

4351911400

4351911472

4351911544

4351911616

4351911688

4351911760

4351911832

4351911904

4351911976

4351912048

4351912120

4351912192

4351912264

4351912336

4351912408

4351912480

4351912552

4351912624

4351912696

4351912768

可见, 每次append都是一个新的对象, 内存地址都不同. 因此修改的时候不会互相影响.

auto_aliens = []

alien_0 = {'color':'red'}

for x in range(0,30):

print(id(alien_0))

auto_aliens.append(alien_0)

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

4349948120

此时,都是同一个对象, 后续修改都是在操作id为4349948120的对象,所以都会发生变动.

以上是 关于python中 for循环语句位置顺序的疑问 的全部内容, 来源链接: utcz.com/p/938474.html

回到顶部