为什么python netaddr复制变量引用而不是创建新实例

时间:2017-01-12 03:24:19

标签: python inetaddress

我想制作一个IPNetwork变量的副本,而不是引用(和更改)现有变量。为什么更改'x'也会改变'nw'?

>>> nw=IPNetwork('1.1.1.1/24')
>>> nw
IPNetwork('1.1.1.1/24')
>>> x = nw
>>> x.prefixlen = 28
>>> nw
IPNetwork('1.1.1.1/28')

2 个答案:

答案 0 :(得分:0)

问题在于变量赋值。 x = nw告诉变量x指向nw指向的同一个对象。

您需要的是列表或其他可变对象:

>>> nw = [IPNetwork('1.1.1.1/24')]
>>> x = nw
>>> x[0].prefixlen = 28
>>> x[0]

希望这有帮助!

答案 1 :(得分:0)

不幸的是,这与x和nw引用相同变量的结果相同:
        来自netaddr import *
        nw = [IPNetwork('1.1.1.1/24')]
        x = nw
        X [0] .prefixlen = 28
        X
    [IPNetwork( '1.1.1.1/28')]
        NW
    [IPNetwork( '1.1.1.1/28')]

我想出了使用IPNetwork创建新实例的解决方案:
        NW = IPNetwork( '1.1.1.1/24')
        NW
    IPNetwork( '1.1.1.1/24')

        x = IPNetwork(nw)
        x.prefixlen = 28
        X
    IPNetwork( '1.1.1.1/28')
        NW
    IPNetwork( '1.1.1.1/24')