叫我学弟
2020-05-20 11:15
采纳率: 33.3%
浏览 132
已采纳

python闭包函数三次赋值给相同变量,变量内存地址发生变化,是为什么呢

创建了一个闭包函数,而后调用赋值给一个变量x,执行三次,这三次变量x的内存地址发生了变化,可能我说的不太明白,看代码和输出应该就能明白了。

def gengerate_count():
    container = [0]

    def add_one():
        container[0] = container[0] + 1
        print(container[0])

    return add_one


x = gengerate_count()
print(x)

x = gengerate_count()
print(x)

x = gengerate_count()
print(x)

上面这串代码输出为:

.add_one at 0x0000018A4BF2A3A8>
.add_one at 0x0000018A4BF2A318>
.add_one at 0x0000018A4BF2A3A8>

可以看到,x的内存地址在第二次赋值时发生了变化,第三次执行时又变回和第一次相同了。

而后我又多进行多次赋值,

def gengerate_count():
    container = [0]

    def add_one():
        container[0] = container[0] + 1
        print(container[0])

    return add_one


x = gengerate_count()
print(x)
x = gengerate_count()
print(x)
x = gengerate_count()
print(x)
x = gengerate_count()
print(x)
x = gengerate_count()
print(x)
x = gengerate_count()
print(x)
x = gengerate_count()
print(x)

输出为:

.add_one at 0x0000024E5354A318>
.add_one at 0x0000024E537300D8>
.add_one at 0x0000024E5354A318>
.add_one at 0x0000024E537300D8>
.add_one at 0x0000024E5354A318>
.add_one at 0x0000024E537300D8>
.add_one at 0x0000024E5354A318>
发现,奇数次的内存地址相同,偶数次的内存地址相同。

这是什么原理呢?与python的内存机制有关系么?求大佬解答

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

  • 吃鸡王者 2020-05-20 15:02
    最佳回答

    可能文字太多,一只发不出去,只能截图了,希望能对你有帮助:
    图片说明

    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题