GVKun编程网logo

Python是否在分配时复制对象?(python分配问题)

39

在本文中,我们将带你了解Python是否在分配时复制对象?在这篇文章中,我们将为您详细介绍Python是否在分配时复制对象?的方方面面,并解答python分配问题常见的疑惑,同时我们还将给您一些技巧,

在本文中,我们将带你了解Python是否在分配时复制对象?在这篇文章中,我们将为您详细介绍Python是否在分配时复制对象?的方方面面,并解答python分配问题常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的django – 已弃用的SubfieldBase替换为在分配时调用to_python?、iPython是否内置支持在分页器中查看变量?、java – System.arrayCopy()复制对象或引用对象?、python – 是否可以在列表推导中创建和引用对象?

本文目录一览:

Python是否在分配时复制对象?(python分配问题)

Python是否在分配时复制对象?(python分配问题)

我希望下面的代码只会初始化dict_adict_b以及dict_c字典。但它似乎具有复制效果:

dict_a = dict_b = dict_c = {}dict_c[''hello''] = ''goodbye''print dict_aprint dict_bprint dict_c

如您所见,结果如下:

{''hello'': ''goodbye''}{''hello'': ''goodbye''}{''hello'': ''goodbye''}

为什么该程序会产生先前的结果,当我期望它返回时:

{}{}{''hello'': ''goodbye''}

答案1

小编典典

这是因为在Python中,变量(名称)只是对单个对象的引用。当您指定dict_a =dict_b,你真的复制存储器地址(或指针,如果你愿意)从dict_bdict_a。该词典仍然有一个实例。

要获得所需的行为,请使用dict.copy方法,或者copy.deepcopy如果您的字典可能具有嵌套的字典或其他嵌套的对象,请使用。

>>> a = {1:2}>>> b = a.copy()>>> b{1: 2}>>> b[3] = 4>>> a{1: 2}>>> b{1: 2, 3: 4}>>>

django – 已弃用的SubfieldBase替换为在分配时调用to_python?

django – 已弃用的SubfieldBase替换为在分配时调用to_python?

根据 docs,SubfieldBase将在1.10中删除并替换为from_db_value()

令我困惑的是:

Note that the new approach does not call the to_python() method on assignment as was the case with SubfieldBase.

我认为这是SubfieldBase的主要观点.在> = 1.9中对值赋值进行验证的最佳方法是什么?

解决方法

你不应该自己调用to_python.只需在from_db_value中实现正确的转换.此函数现在负责从DB Value创建适当的python表示.对于大多数字段,不需要它,因为DB后端已经执行转换.

iPython是否内置支持在分页器中查看变量?

iPython是否内置支持在分页器中查看变量?

我经常需要在iPython中查看长文本变量。我通常为此使用滚动缓冲区,但我确实希望使用寻呼机进行搜索。iPython是否可以查看寻呼机中的长变量(例如,更少)?如果没有,我当然可以想出一种用!来实现的方法。

注意:我不是问一般如何设置PAGER。?,??,%pdoc等都可以用更少的工作量。我专门问分页变量。

答案1

小编典典

答案:%page

用法示例:

snafu$ ipythonIn [1]: import httplib2In [2]: resp,data = httplib2.Http().request(''http://google.com'')In [3]: %page data

java – System.arrayCopy()复制对象或引用对象?

java – System.arrayCopy()复制对象或引用对象?

我有一个最后的类NameAndValue.我使用System.arraycopy()复制了一个NameAndValue对象数组,当我更改了复制数组中的NameAndValue对象时,它反映在原始数组中.
public final class NameAndValue
{
    public String name;
    public String value;

    public NameAndValue()
    {

    }

    public NameAndValue(String name,String value)
    {
        this.name = name;
        this.value = value;
    }
}

public class Main
{
    public static void main(String[] args)
    {
        NameAndValue[] nv = new NameAndValue[4];
        nv[0] = new NameAndValue("A","1");
        nv[1] = new NameAndValue("B","2");
        nv[2] = new NameAndValue("C","3");
        nv[3] = new NameAndValue("D","4");

        NameAndValue[] nv2 = new NameAndValue[4];
        System.arraycopy(nv,nv2,2);
        nv2[2] = new NameAndValue("Y","25");
        nv2[3] = new NameAndValue("Z","26");

        for (int i = 0; i < 2; i++)
        {
            NameAndValue[] nv3 = new NameAndValue[4];
            System.arraycopy(nv2,nv3,4);
            nv3[2].value = String.valueOf(i);
            nv3[3].value = String.valueOf(i+1);

            System.out.println(nv2[2].value);
            System.out.println(nv2[3].value);
            System.out.println("-----------------------");
        }
    }
}

我得到的输出,

0
1
-----------------------
1
2
-----------------------

在所有情况下,我应该输出25和26,对吗?为什么会改变?

解决方法

System.arraycopy() copies object or reference to object?

参考,这是一个浅的副本.令人惊讶的是,the docs don’t say that explicitly只是隐含地介绍复制数组元素,而不是递归地复制他们引用的东西.

这与以前一样:

NameAndValue nv1 = new NameAndValue("A","1");
NameAndValue nv2 = nv1;
nv2.value = "4";
System.out.println(nv1.value); // 4

每个数组元素就像上面的nv1和nv2 vars.正如nv1和nv2引用(指向)相同的底层对象,数组条目也是如此,包括当这些条目从一个数组复制到另一个数组时.

python – 是否可以在列表推导中创建和引用对象?

python – 是否可以在列表推导中创建和引用对象?

我有一个网址列表,我想要净位置.

urls = ["http://server1:53000/cgi-bin/mapserv?map=../maps/Weather.wms.map","http://server2:53000/cgi-bin/mapserv?map=../maps/Weather.wms.map"]

我通常会写这样的东西:

servers = []
for url in urls:
    o = urlparse(url)
    servers.append(o.netloc)

然后我立刻想到,“我应该把它理解为”并继续写这个(当然这不起作用):

servers = [o.netloc() for urlparse(url) as o in urls]

python有办法做这种复杂的理解吗? (也许在3.x?)

在更具学术性的层面上,这种复杂的理解能否与“pythonic”相距甚远?这对我来说似乎相对直观,但我之前完全偏离了这些事情.

解决方法

无需分配中间名称,只需直接访问urlparse()返回值的.netloc属性:

servers = [urlparse(url).netloc for url in urls]

以这种方式做这是一个完美的pythonic事情.

关于Python是否在分配时复制对象?python分配问题的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于django – 已弃用的SubfieldBase替换为在分配时调用to_python?、iPython是否内置支持在分页器中查看变量?、java – System.arrayCopy()复制对象或引用对象?、python – 是否可以在列表推导中创建和引用对象?的相关知识,请在本站寻找。

本文标签: