回答編集履歴

3

追記

2018/05/11 15:09

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -139,3 +139,75 @@
139
139
 
140
140
 
141
141
  こっちでしょうか?
142
+
143
+
144
+
145
+ 質問編集を受けて
146
+
147
+ ---
148
+
149
+ > UpdaterインスタンスがEnvironmentインスタンスを直接保持するように
150
+
151
+
152
+
153
+ こういうことです。
154
+
155
+
156
+
157
+ ```Python
158
+
159
+ class Environment:
160
+
161
+ def __init__(self, width, depth):
162
+
163
+ self.Env = [[0 for w in range(width)] for d in range(depth)]
164
+
165
+ self.updater = Updater(self)
166
+
167
+
168
+
169
+ def getEnv(self):
170
+
171
+ return self.Env
172
+
173
+
174
+
175
+ class Updater:
176
+
177
+ def __init__(self, Environment):
178
+
179
+ self.Environment = Environment
180
+
181
+
182
+
183
+ def changeEnv(self, width, depth):
184
+
185
+ self.Environment.Env = [[1 for w in range(width)] for d in range(depth)]
186
+
187
+
188
+
189
+ my_env = Environment(5, 5)
190
+
191
+ print(my_env.getEnv())
192
+
193
+ my_env.updater.changeEnv(10, 10)
194
+
195
+ print(my_env.getEnv())
196
+
197
+ ```
198
+
199
+
200
+
201
+ **実行結果** [Wandbox](https://wandbox.org/permlink/1oWvo9vHdTZa9hRT)
202
+
203
+ ```
204
+
205
+ [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
206
+
207
+ [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
208
+
209
+ ```
210
+
211
+
212
+
213
+ EnvironmentクラスがEnv属性を持ってしまっているのが問題をややこしくしているような。

2

追記

2018/05/11 15:09

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -104,22 +104,38 @@
104
104
 
105
105
  my_env = Environment(5, 5)
106
106
 
107
+ print(my_env.getEnv() is my_env.updater.Env)
108
+
109
+
110
+
107
111
  my_env.updater.swapEnv([1, 2, 3])
108
112
 
109
113
  print(my_env.getEnv())
110
114
 
111
115
  print(my_env.updater.Env)
112
116
 
117
+
118
+
119
+ print(my_env.getEnv() is my_env.updater.Env)
120
+
113
121
  ```
114
122
 
115
123
 
116
124
 
117
- **実行結果** [Wandbox](https://wandbox.org/permlink/CDLpfFk7AIIGQtHA)
125
+ **実行結果** [Wandbox](https://wandbox.org/permlink/6AuXdC5N3DgN1Olg)
118
126
 
119
127
  ```
128
+
129
+ True
120
130
 
121
131
  [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
122
132
 
123
133
  [1, 2, 3]
124
134
 
135
+ False
136
+
125
137
  ```
138
+
139
+
140
+
141
+ こっちでしょうか?

1

追記

2018/05/11 14:44

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -59,3 +59,67 @@
59
59
  [[10, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
60
60
 
61
61
  ```
62
+
63
+
64
+
65
+ ひょっとしたら
66
+
67
+ ---
68
+
69
+ ハマるとすれば、『Envに再代入してしまった場合』です。
70
+
71
+ ```Python
72
+
73
+ class Environment:
74
+
75
+ def __init__(self, width, depth):
76
+
77
+ self.Env = [[0 for w in range(width)] for d in range(depth)]
78
+
79
+ self.updater = Updater(self)
80
+
81
+
82
+
83
+ def getEnv(self):
84
+
85
+ return self.Env
86
+
87
+
88
+
89
+ class Updater:
90
+
91
+ def __init__(self, Environment):
92
+
93
+ self.Env = Environment.Env
94
+
95
+
96
+
97
+ def swapEnv(self, new_env):
98
+
99
+ self.Env = new_env
100
+
101
+
102
+
103
+
104
+
105
+ my_env = Environment(5, 5)
106
+
107
+ my_env.updater.swapEnv([1, 2, 3])
108
+
109
+ print(my_env.getEnv())
110
+
111
+ print(my_env.updater.Env)
112
+
113
+ ```
114
+
115
+
116
+
117
+ **実行結果** [Wandbox](https://wandbox.org/permlink/CDLpfFk7AIIGQtHA)
118
+
119
+ ```
120
+
121
+ [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
122
+
123
+ [1, 2, 3]
124
+
125
+ ```