在本文中,我们将带你了解Python是否在分配时复制对象?在这篇文章中,我们将为您详细介绍Python是否在分配时复制对象?的方方面面,并解答python分配问题常见的疑惑,同时我们还将给您一些技巧,
在本文中,我们将带你了解Python是否在分配时复制对象?在这篇文章中,我们将为您详细介绍Python是否在分配时复制对象?的方方面面,并解答python分配问题常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的django – 已弃用的SubfieldBase替换为在分配时调用to_python?、iPython是否内置支持在分页器中查看变量?、java – System.arrayCopy()复制对象或引用对象?、python – 是否可以在列表推导中创建和引用对象?。
本文目录一览:- Python是否在分配时复制对象?(python分配问题)
- django – 已弃用的SubfieldBase替换为在分配时调用to_python?
- iPython是否内置支持在分页器中查看变量?
- java – System.arrayCopy()复制对象或引用对象?
- python – 是否可以在列表推导中创建和引用对象?
Python是否在分配时复制对象?(python分配问题)
我希望下面的代码只会初始化dict_a
,dict_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_b
到dict_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?
令我困惑的是:
Note that the new approach does not call the
to_python()
method on assignment as was the case withSubfieldBase
.
我认为这是SubfieldBase的主要观点.在> = 1.9中对值赋值进行验证的最佳方法是什么?
解决方法
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()复制对象或引用对象?
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 – 是否可以在列表推导中创建和引用对象?
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”相距甚远?这对我来说似乎相对直观,但我之前完全偏离了这些事情.
解决方法
servers = [urlparse(url).netloc for url in urls]
以这种方式做这是一个完美的pythonic事情.
关于Python是否在分配时复制对象?和python分配问题的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于django – 已弃用的SubfieldBase替换为在分配时调用to_python?、iPython是否内置支持在分页器中查看变量?、java – System.arrayCopy()复制对象或引用对象?、python – 是否可以在列表推导中创建和引用对象?的相关知识,请在本站寻找。
本文标签: