python self 序列_Python中非序列类型期望值拷贝的解决方案

看下面这段代码:

# -*- coding: utf-8 -*-

import copy

class Present(object):

def __init__(self, str_cmd):

self._str_cmd = str_cmd

print "进入Present时的地址:", id(self._str_cmd)

def set_value(self):

temp = "test_cmd"

self._str_cmd = copy.deepcopy(temp)

def get_value(self):

return self._str_cmd

def print_value(self):

# print self._str_cmd

print "在Present中被赋值后的地址:", id(self._str_cmd)

class Son(Present):

def __init__(self, str_cmd):

Present.__init__(self, str_cmd)

self.str_cmd = str_cmd

def Son_print(self):

print "Son中的当前地址: ", id(self.str_cmd)

self.str_cmd = self.get_value()

print "Son中get_value之后的地址", id(self.str_cmd)

代码意图是Son中的str_cmd在Present中值被改变,但是在Son中希望能看到这个改变。如果没有标红的这行,那么程序执行结果如下:

最开始的地址:  39466208

进入Present时的地址: 39466208

在Present中被赋值后的地址: 39426752

Son中的当前地址:  39466208

Son中get_value之后的地址 39466208

在Son中看到的是39466208这个地址的内容,但是Present改变的是39426752,所以虽然名字一样,但实际两个类中看到的变量不是同一个。

如果加上红色的这句,那么结果变成:

最开始的地址:  39138528

进入Present时的地址: 39138528

在Present中被赋值后的地址: 39099072

Son中的当前地址:  39138528

Son中get_value之后的地址 39099072

这个时候get_value之后,Son和Present的str_cmd都已经指向了同一个Id,所以两者看到的已经是同一个变量。

用以上方案可以实现非序列变量的值拷贝,对于序列变量的值拷贝,直接使用copy.deepcopy即可。

Python 的详细介绍:请点这里

Python 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值