diff --git a/cpu/cpujit.py b/cpu/cpujit.py
index 7f36c88c37a11a7e6697e4b1949152c3b4dfeb53..fa04eda775b2d0aeba8050ec717c710057f6b672 100644
--- a/cpu/cpujit.py
+++ b/cpu/cpujit.py
@@ -68,6 +68,7 @@ import platform
 import glob
 import atexit
 import shutil
+import numpy as np
 from appdirs import user_config_dir, user_cache_dir
 from ctypes import cdll
 from pystencils.backends.cbackend import generateC, getHeaders
@@ -428,7 +429,8 @@ def makePythonFunctionIncompleteParams(kernelFunctionNode, argumentDict, func):
     cacheValues = []
 
     def wrapper(**kwargs):
-        key = hash(tuple((k, id(v)) for k, v in kwargs.items()))
+        key = hash(tuple((k, v.ctypes.data, v.strides, v.shape) if isinstance(v, np.ndarray) else (k, id(v))
+                         for k, v in kwargs.items()))
         try:
             args = cache[key]
             func(*args)
diff --git a/gpucuda/cudajit.py b/gpucuda/cudajit.py
index 6f5633d5e99cb7ff751800f94e1cab1d4369b1c6..2cfafb0ee2910ac80ff01f53298bdde4d263a0d1 100644
--- a/gpucuda/cudajit.py
+++ b/gpucuda/cudajit.py
@@ -33,7 +33,8 @@ def makePythonFunction(kernelFunctionNode, argumentDict={}):
     cacheValues = []
 
     def wrapper(**kwargs):
-        key = hash(tuple((k, id(v)) for k, v in kwargs.items()))
+        key = hash(tuple((k, v.ctypes.data, v.strides, v.shape) if isinstance(v, np.ndarray) else (k, id(v))
+                         for k, v in kwargs.items()))
         try:
             args, dictWithBlockAndThreadNumbers = cache[key]
             func(*args, **dictWithBlockAndThreadNumbers)